代码之家  ›  专栏  ›  技术社区  ›  mck89

PHP间接修改重载属性

  •  2
  • mck89  · 技术社区  · 14 年前

    我有一个简单的课程:

    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”属性,它应该通过引用返回其第一个子级,如果没有子级,则返回空值。

    $a=new A;
    $c=&$a->firstChild;
    

    现在,如果该类包含至少一个子类,那么它会很好地工作,但是如果它不工作(并且应该返回空值),那么它会触发错误“间接修改重载属性”。

    为什么会这样?我不想修改任何东西,那“间接修改”是什么?为什么我要去掉参考标志( $c=$a->firstChild; 它起作用了吗?

    1 回复  |  直到 7 年前
        1
  •  4
  •   Nathan    12 年前

    我想你应该用 empty() 而不是 count() . 原因之一是(引自手册 计数() )

    如果var不是数组或具有已实现可计数接口的对象,则返回1。有一个异常,如果var为空,则返回0。

    另外,如果您将对象存储在此数组中,则不必使用引用,因为(在php5+中)对象在默认情况下是传递引用的。