Возможный дубликат:
Передать ссылку на $ this в конструкторе PHP
Я работаю над простой PHP-инфраструктурой в качестве учебного проекта. У меня есть объект запроса с методом _execute()
. В этом методе я (между прочим) создаю объект, называемый pageController, вызываю метод на нем и удаляю объект, используя следующий код:
$controller = new $this->_controllerName($this); call_user_func(array($controller, $this->_methodName)); unset($controller);
Как вы можете видеть, я передаю текущий объект конструктору нового pageController. Мой конструктор выглядит следующим образом:
public function __construct(Request $request) { parent::__construct($request); // More stuff }
Контроллер родителя выглядит следующим образом:
public function __construct(Request $request) { $this->_request = $request; }
Все это прекрасно работает, но есть проблема с моим деструктором. В pageController у меня есть еще два метода:
public function __destruct() { $this->_render(); } public function _render($templateName = 'default') { $this->_request->_response->_body = $this->_template->_render(); }
Мой _render()
отлично работает, если я вызываю его из другого метода в pageController: я могу получить тело ответа из исходного объекта запроса, используя $this->_response->_body
. Однако, когда я вызываю метод _render()
из моего деструктора, изменения не изменяются в объекте запроса. Когда я вызываю print_r()
сразу после вызова функции _render()
, изменения как- то видны …
Подводя итог: любые изменения, которые я делаю для свойства _request
в деструкторе, как-то не меняются в исходном объекте запроса, который ссылается на то же, поскольку объекты (почти) всегда не копируются, а ссылаются. Что я делаю не так?
Примечание. Я задал аналогичный вопрос до этого , но эти вопросы были недостаточно конкретными (потому что я не полностью понял проблему, а затем и благодаря плохим испытаниям самостоятельно). Я решил, что должен задать новый, конкретный, прямой вопрос, чтобы кто-то мог мне помочь.