在对象__destruct修改()不保存PHP

可能重复:
通过参考$这构造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在析构函数属性在某种程度上不是在初始请求对象,它引用到相同的改变,因为对象是(几乎)总是不被复制,但引用。 我究竟做错了什么?

注:我问过类似的问题之前在这里,但问题是不够具体(因为我没有完全理解的问题,那么,感谢一些不好的测试由我自己)。 我想我应该问一个新的,具体的,直接的问题,所以有人希望能帮助我。

--------------解决方案-------------

PHP的版本是您使用? 我是不是能够复制上您的问题5.3.6用下面的代码:

class Foo {
public function __construct(Bar $bar) {
$this->bar = $bar;
}
public function __destruct() {
$this->bar->value = 'set by Foo::__destruct';
}
}

class Bar {
public function __construct() {
$this->value = 'set by Bar::__construct';
}
}

$bar = new Bar();
$foo = new Foo($bar);
print $bar->value . PHP_EOL; // => 'set by Bar::__construct'
unset($foo);
print $bar->value . PHP_EOL; // => 'set by Foo::__destruct'

是沿着相同的路线,你正在试图做什么。 如果是......这听起来像也许你的应用程序逻辑的其他部分产生干扰。

分类:php 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.403 (s). 10 q(s)