Допустим, у меня есть эти классы:
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, но когда вы смотрите на этот объект $, это значение неверно.
foreach($foo->_data['objects'] as &$object) { $object->setValue(1); }
Обратите внимание на &
Foreach работает с копией массива. Используйте переменную & перед переменной объекта.
foreach ($ foo -> _ data ['objects'] as & $ object)