Передать ссылку на $ this в конструкторе PHP - PullRequest
2 голосов
/ 08 августа 2011

У меня есть класс под названием Request.В какой-то момент в этом классе я создаю новый контроллер, используя следующий код, передавая $this в конструкторе:

$controller = new $this->_controllerName($this);

Мой конструктор контроллера выглядит следующим образом:

public function __construct(Request $request) {
    parent::__construct($request);

    // More stuff
}

ЕслиЯ изменяю $request в этом объекте или его родительском объекте, значения не изменяются в объекте, который первоначально вызвал его.Я также попытался изменить определение конструктора на public function __construct(Request &$request) { (как сказано на php.net ), но это тоже не работает.Как я могу это исправить?

Заранее спасибо!

Редактировать 1: Как спросили некоторые код, который показывает, что я делаю с $request.У класса есть публичное свойство с именем _response, которое имеет публичное свойство с именем _body.В одном из моих методов я делаю следующее:

$this->_request->_response->_body = $this->_template->_render();

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

Я забыл упомянуть, что я сбросил объект сразу после вызова метода, это проблема?

Редактировать 2: Как указано ниже, он действительно работает, но этопочему-то больше не работает, когда я вызываю его из моей __destruct() функции.Почему это так?

1 Ответ

2 голосов
/ 08 августа 2011

class Request{
    public $var= 'a';
    public $_controllerName='b';
    public function x(){
        $controller = new $this->_controllerName($this);
    }
}
class controller{
    public function __construct(Request $req){
        $req->var='xyz';
    }
}


class b extends controller{
    public function __construct(Request $req){
        parent::__construct($req);
        print $req->var;
        $req->var='LOL';
    }
}

$r=new Request();
$r->x();
print "\n";
print $r->var;

отпечатки

xyz
LOL

Итак, в обоих случаях это хорошо работает

...