PHP类中的__get()和__set函数到底有什么用?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP类中的__get()和__set函数到底有什么用?相关的知识,希望对你有一定的参考价值。

当试图获取一个不可达变量时,类会自动调用__get。

同样的,当试图设置一个不可达变量时,类会自动调用__set。
在网站中,这两个并不是什么非用不可的函数。
 
例如:
Class Test
{
    private $a = 1;
    private $b = 2;
    public  $c = 3;
 
    public function  __get($vname)
    {
        return "you can not get";
    }
 
    public function __set($vname,$value)
    {
        echo  "you can not set";
    }
}
 
$t = new Test;
 
echo $t->a;//这里试图要打印出私有变量
$t->b=3;//这里试图要把私有变量进行设置
 
想要直接对私有变量操作,当然是做不到的。
于是在读取的时候,调用__get(),输出“you can not get”;
在设置的时候,调用__set(),输出“you can not set”。
 
顺便提一下,__get()和__set()函数要设置为public,要不然会Warning。
__get()和__set()函数定义时的参数分别为1个和2个,不管函数中到底有没用,都是不可省略的。
 
通过修改__get()和__set()函数内部的语句,就可以实现在外部调用类的私有变量。
例如:
private __get($vname)
{
    return $this->$vname;
}
如果$vname的值是a,那么就返回了正确的值。
__set()也同理。
 

public function __set($vname,$value)
{
    $this->$vname = $value;
}

以上是关于PHP类中的__get()和__set函数到底有什么用?的主要内容,如果未能解决你的问题,请参考以下文章

PHP中的__get()和__set()方法获取设置私有属性

php __set()和__get()的具体用法,举例说明,谢~

PHP魔术方法

php魔术方法

php魔术方法

php中那个__set()魔术方法到底有啥用??有没有通俗一点的解释?