PHP 魔术方法__set() __get() 方法
先看看官方文档的解释
__set() is run when writing data to inaccessible properties.
__get() is utilized for reading data from inaccessible properties.
究竟用中文怎么翻译呢?   inaccessible :n. 难达到;难接近;无法理解。
有代码有真相:
| <?phperror_reporting(E_ALL);classstu{    private$a;    private$b= 0;    public$c;    public$d= 0;        //这里的 private 可以用 protected public 替代    privatefunction__get($name) {        return123;    }        //这里的 private 也可以用 protected public 替代    privatefunction__set($name, $value) {        echo"This is set function";    }}$s= newstu();var_dump($s->a);  //output: 123var_dump($s->b);  //output: 123var_dump($s->c);  //output: nullvar_dump($s->d);  //output: 0var_dump($s->e);  //output: 123$s->a = 3;   //output: This is set function$s->c = 3;  //no output$s->f = 3;  //output: This is set function?> | 
 结果:
如果没有__get方法,执行 var_dump($s->a)  var_dump($s->b) 会有致命的错误
如果没有__get方法,执行 var_dump($s->e) 会有一个notice,提示没有定义属性 $e
总结:
1. 从一个难以访问的属性读取数据的时候 __get() 方法被调用
2. 向一个难以访问的属性赋值的时候 __set() 方法被调用
3. 难以访问包括:(1)私有属性,(2)没有初始化的属性
4. __isset() __unset() 也类似
生命只有一次。
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号