我有这个简单的课程:
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;
现在,如果该类至少包含一个子节点,则它可以很好地工作但如果它不存在(并且它应该返回null),则会触发错误“间接修改重载属性”。
为什么会这样?我不是要修改任何东西,那么什么是“间接修改”?如果我删除引用标志($c=$a->firstChild;
)它的工作原理是什么?
答案 0 :(得分:4)
我认为您应该使用empty()
代替count()
。其中一个原因是(count()
手册中的引用)
如果var不是数组或具有已实现Countable接口的对象,则返回1。有一个例外,如果var为NULL,则返回0。
此外,如果您在此数组中存储对象,则不必使用引用,因为(在PHP 5+中)对象默认传递引用。