欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

关于set的问题

程序员文章站 2022-05-09 08:35:00
...
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,会被提示未定义变量; 没注意魔术方法里面就是这样用的;
相关标签: 关于set的问题