ArrayObject
не совпадает с array_map
, array_reduce
и подобными функциями, которые ожидают в качестве входных данных реальный массив.Если вы хотите, чтобы свойство массива объекта копировалось по ссылке, оберните его любым объектом:
class Test
{
private $array;
public function __construct()
{
$this->array = (object) ['array' => []];
}
// we also need to return it by reference
public function &getMyArray()
{
return $this->array->array;
}
}
Пример использования:
$test = new Test();
$test->getMyArray()[] = 'Hello';
$another = clone $test;
$another->getMyArray()[] = 'Fucking';
$third = clone $another;
$third->getMyArray()[] = 'World!';
unset($test->getMyArray()[1]);
var_dump($test->getMyArray() === $third->getMyArray());
var_dump(implode(" ", $test->getMyArray()));
var_dump(gettype($test->getMyArray()));
Пример вывода:
bool(true)
string(12) "Hello World!"
string(5) "array"