передача класса в другой класс, снова mvc

SergXP

Новичок
Всем доброе время суток!
Помогите разобраться с проблемой передачи объекта класса..

Пытаюсь сделать так, чтобы работал вывозов в контроллере:
PHP:
$router = $this->getRouter();
echo $router->url($name);
//тоже самое
$this->getRouter()->url($name);
вот что у меня получается
PHP:
class router {
   public $urls = array('signup'=>'/signup');
    
    function __construct() {
        $this->urls['login'] = '/login';
    }
    
    function exucete() {
        $action = 'index';
        $controller = 'index';
        $controller = new $controller();
        $controller->$action();
    }
    public function getInstance() {
      return $this;
  } 
   public function url($name) {
        echo $this->urls[$name];
    }
    
}

class controller {
    function __construct() {

    }
    function getRouter() {
       return router::getInstance();
    }
}

class index extends controller {
    public $controller = 'index';
    
    function index() {
      print_r($this->getRouter());     // в итоге выводит массив контроллера, а не роутера
      $this->getRouter()->url();
    }
    
}

$router = new router;
$router->exucete();
пробовал через статические методы, передачу через конструктор при вызове контроллера..

Подскажите, в чем проблема?

Спасибо
 

AmdY

Пью пиво
Команда форума
router::getInstance(); - ты вызываешь статический метод, потому в нём нет никакого $this.
во вторых здесь статики не нужно
PHP:
abstract class Controller {
    final public function __construct(Router $router) {
        $this->_router = $router;
    }
    function getRouter() {
       return $this->_router;
    }
}
// соответственно инджексишь в конструктор
   function exucete() {
        $action = 'index';
        $controller = 'index';
        $controller = new $controller($this);
        $controller->$action();
    }
 

SergXP

Новичок
ага, работает! Благодарю!

Правда у меня почему-то шаблонизатор, кривовато заработал, но это поправлю..
У меня вопрос, что дает символ "_" перед переменной?
Это мы объявляем идентификатор?
Если его убрать, и сделать так $this->router; перестает работать.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
ага, работает! Благодарю!

У меня вопрос, что дает символ "_" перед переменной?
Ничего не дает, это соглашение, пришедшее из других языков — переменная начинающаяся с подчеркивания, считается приватной.
 

Absinthe

жожо
Им пользуются в некоторых проектах.
Я, лично, не вижу в нем смысла, т.к. в списке методов объекта при автодополнении приватные методы не видны, а в определении класса выделяются словом private.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Им пользуются в некоторых проектах.
Я, лично, не вижу в нем смысла, т.к. в списке методов объекта при автодополнении приватные методы не видны, а в определении класса выделяются словом private.
Ну, они видны в локальной области видимости, для $this->
Кроме того, в иногда это надо, когда ты магией эмулируешь доступ к одноименным «публичным» свойствам.
 

Redjik

Джедай-мастер
А там у них картинки разные :D
Это в какой IDE? 0_о

Им пользуются в некоторых проектах.
Я, лично, не вижу в нем смысла, т.к. в списке методов объекта при автодополнении приватные методы не видны, а в определении класса выделяются словом private.
В PDT все отлично привязывается.
 

Absinthe

жожо
PHP:
Это в какой IDE? 0_о
А в каком этого нет? Прямо сейчас пишу в IDEA - есть. Насколько помню, в ZS были.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
А в каком этого нет? Прямо сейчас пишу в IDEA - есть.
Нету —

Как видно, там вообще даже в автокомлитной доке не показана приватность, что на самом деле правильно — либо переменная видна в текущем пространстве, либо — нет, и тогда ее просто нет в списке.
 

Redjik

Джедай-мастер
Да, гоню, приватные только для локальной - так же.
 
Сверху