3.PHP语言的访问器__get()和__set()函数

class ClassName
{
    private $attribute;
    function __get($name)
    {
        return $this->$name;
    }
    function __set($name,$value)
    {
        $this->$name = $value;
    }
}
$a = new ClassName();
$a->attribute = 5;

由于$attribute是私有属性,所以不可以直接被对象调用,此语句表面看是$a对象直接调用attribute属性并赋值,其实是隐式调用了__set()函数,其中$name参数值被设置为“attribute“,$value参数值被设置为5。

$a->attribute

此语句也是隐式调用__get()函数,其中$name参数值被设置为“attribute”。

由于一般情况下,感觉不到访问器_get()函数和__set()函数的存在,但是由于访问和修改属性必须通过这个唯一的访问入口,开发者可以修改该函数的内部代码以实现更多的功能。

其实,_get()函数和__set()函数在PHP中被称为魔术方法(magic methods),当调用当前环境下未定义或不可见的类属性或方法时,重载(overloading)魔术方法会被调用。

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/php/phphigh/5015.html

发表评论

登录后才能评论