PHP间接修改重载属性

时间:2010-10-06 14:19:33

标签: php class properties overloading

我有这个简单的课程:

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;)它的工作原理是什么?

1 个答案:

答案 0 :(得分:4)

我认为您应该使用empty()代替count()。其中一个原因是(count()手册中的引用)

  

如果var不是数组或具有已实现Countable接口的对象,则返回1。有一个例外,如果var为NULL,则返回0。

此外,如果您在此数组中存储对象,则不必使用引用,因为(在PHP 5+中)对象默认传递引用。