我有一个叫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()
函数调用它时,它在某种程度上不再起作用。为什么会这样?
答案 0 :(得分:2)
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
因此,它适用于两种情况