class aa{	function __set($pro, $v){		echo a\n;		$this->pro=$v;		echo $v\n;	}}$a=new aa;$a->b=1;
输出是a a 1 1;
2个问题,为何输出2次;
为何是a a 1 1,而不是a 1 a 1;
回复讨论(解决方案)   你把 echo a\n; 改成 echo $pro\n; 就会看到  
 b     因为 b 属性不存在,所以进入了 __set 方法  
 pro 同样因为 pro 属性不存在,再次进入 __set 方法  
 1    进入两次,打印两次值就不足为奇了  
 1
当 $this->pro=$v;  
 改为 $this->$pro=$v;  
 就只进入一次了
你把 echo a\n; 改成 echo $pro\n; 就会看到   
 b     因为 b 属性不存在,所以进入了 __set 方法   
 pro 同样因为 pro 属性不存在,再次进入 __set 方法   
 1    进入两次,打印两次值就不足为奇了   
 1
当 $this->pro=$v;   
 改为 $this->$pro=$v;   
 就只进入一次了
理解了,主要是$this->pro的问题;
平时手误写成$this->$val,会被提示未定义变量;  没注意魔术方法里面就是这样用的;
   
 
   