假设我有以下这些类:
class Foo {
public $_data;
public function addObject($obj) {
$this->_data['objects'][] = $obj;
}
}
class Bar {
public $_data;
public function __construct() {
$this->_data['value'] = 42;
}
public function setValue($value) {
$this->_data['value'] = $value;
}
}
$foo = new Foo();
$bar = new Bar();
$foo->addObject($bar);
foreach($foo->_data['objects'] as $object) {
$object->setValue(1);
}
echo $foo->_data['objects'][0]->_data['value']; //42
我的实际代码非常相似,使用了ArrayAccess:
foreach($this->_data['columns'] as &$column) {
$filters = &$column->getFilters();
foreach($filters as &$filter) {
$filter->filterCollection($this->_data['collection']);
}
}
filterCollection可以在$filter中更改值,但当您查看$this对象时,该值不正确。
$object
的值,但这不是你后面要输出的变量 ($foo->_data['objects'][0]
)。 - egispublic
关键字而导致解析错误;如果你在PHP 5中运行,它会按照你的期望工作。我测试了你的代码,得到了1。 - BoltClockclone $object
时才会被复制,即使这样也只进行浅拷贝。 - BoltClock