PHP 间接修改重载属性
我有这个简单的类:
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;
) 它会起作用?
i have this simple class:
class A
{
var $children=array();
function &__get($name)
{
if($name==="firstChild")
{
if(count($this->children)) $ret=&$this->children[0];
else $ret=null;
}
return $ret;
}
}
By accessing the "firstChild" property it should return its first child by reference or null if there are no children.
$a=new A;
$c=&$a->firstChild;
Now if the class contains at least one child it works great but if it doesn't (and it should return null) it triggers the error "Indirect modification of overloaded property".
Why does this happen? I'm not trying to modify anything so what is that "Indirect modification"? And why if i remove the reference sign ($c=$a->firstChild;
) it works?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我认为你应该使用
empty()
而不是count()
。原因之一是(引用count()
手册)另外,如果您在此数组中存储对象,则不必使用引用,因为(在 PHP 5+ 中)对象默认传递引用。
I think you should use
empty()
instead ofcount()
. One reason for that is (quote from manual forcount()
)Also, if you're storing objects in this array, you don't have to use references, since (in PHP 5+) objects are passed reference by default.