先看看php官方文档的解释: 
__set() is run when writing data to inaccessible properties. 
__get() is utilized for reading data from inaccessible properties. 
究竟用中文怎么翻译呢? 
inaccessible :n. 难达到;难接近;无法理解。 
有代码有真相: 
复制代码 代码如下:
 
<?php 
error_reporting(E_ALL); 
class stu{ 
private $a; 
private $b = 0; 
public $c; 
public $d = 0; 
//这里的 private 可以用 protected public 替代 
private function __get($name) { 
return 123; 
} 
//这里的 private 也可以用 protected public 替代 
private function __set($name, $value) { 
echo "This is set function"; 
} 
} 
$s = new stu(); 
var_dump($s->a); //output: 123 
var_dump($s->b); //output: 123 
var_dump($s->c); //output: null 
var_dump($s->d); //output: 0 
var_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() 也类似
您可能感兴趣的文章:
