面向对象的PHP - __set()无法访问受保护的属性

Jo *_* E. -3 php visibility

可能重复:
PHP __get和__set魔术方法

刚开始使用OOP..无论如何不确定我是否理解正确但不应该$attribute由于功能而不改变代码的值__set()?

<?php
class aclass
{
    protected $attribute; //edited from public to protected
    public function __get ($name)
    {
        return $this->$name;    
    }
    public function __set ($name, $value)
    {
        if($name == "foo")
        {
            $this->$name = $value;
        }
    }
} 
$a = new aclass();
$a->attribute = "bar";
echo $a->attribute;
?>
Run Code Online (Sandbox Code Playgroud)

当我运行此错误消息显示:

"致命错误:无法访问受保护的属性aclass :: $ attribute ...第16行"第16行是"echo $ a-> attribute" - 其他帖子说该属性必须设置为PROTECTED但它不起作用.我使用PHP 5.4.3 - 任何想法?

Mat*_*ari 5

__set()只有在尝试访问非公共或未定义的属性时才会调用您的魔术方法,但attribute属性是IS定义的并且是公共的,因此可以直接访问它.

如果您希望该__set()方法"拦截"访问attribute,则必须进行protected或private.