У меня есть этот простой класс:
class A
{
var $children=array();
function &__get($name)
{
if($name==="firstChild")
{
if(count($this->children)) $ret=&$this->children[0];
else $ret=null;
}
return $ret;
}
}
Получив доступ к свойству firstChild, оно должно вернуть своего первого потомка по ссылке или null, если нет потомков.
$a=new A;
$c=&$a->firstChild;
Теперь, если в классе есть хотя бы один дочерний элемент, он прекрасно работает, но если он этого не делает (и должен возвращать ноль), он вызывает ошибку «Косвенное изменение перегруженного свойства».
Почему это происходит? Я не пытаюсь что-либо изменить, так что же это за "Косвенная модификация"? И почему, если я удаляю знак ссылки ($c=$a->firstChild;
), он работает?