Нашел это в комментариях к документации php, похоже, это ошибка:
Обратите внимание, что по крайней мере в PHP 5.1 объекты, реализующие ArrayAccess, не могут возвращать объекты по ссылке. См. http://bugs.php.net/bug.php?id=34783.
Если у вас есть код типа
<?php
$x = &$y[0];
?>
тогда это (насколько я могу судить) всегда завершится ошибкой, если $ y не является реальным массивом - он не может работать, если $ y является объектом, реализующим ArrayAccess. Если ваша функция offsetGet () возвращается по ссылке, вы получаете фатальную ошибку «Объявление MyClass :: offsetGet () должно быть совместимо с таковым у ArrayAccess :: offsetGet ()». Однако если вы попытаетесь вернуть его по значению, вы получите (противоречивую) фатальную ошибку «Объекты, используемые в качестве массивов в post / pre increment / decment, должны возвращать значения по ссылке», по крайней мере, в моей версии PHP.
Поэтому невозможно взять произвольный код, имеющий дело с массивами, и попытаться заменить собственный объект на массив, даже если все обычные функции массива также не потерпели неудачу (что они делают, или, по крайней мере, некоторые из них).