3-19练习关于$this的引用
class haha { public $name="张三丰"; protected $age=28; public function __get($n){ // return "别问了"; if ($n == 'age') { return $this->age; }else{ return '完全听不懂你在说什么'; } } public function __set($n,$v){ // echo "触发了设置不可访问的属性".$n."值为".$v; $this->$n=$v; } } $aa=new haha(); echo $aa->age; // var_dump($n); $aa->age=29; echo $aa->age;
如果这里不加$符号 相当于 一个 公共的属性$n, 但是第一次 echo$aa->age 调用 这个受保护的属性时 __get()函数里面 的参数是$n ,此时 $n参数和age是一个 传递的过程
所以运行结果是28 !当 给受保护的属性age赋值29的时候 会调用__set()函数 ,该函数 需要两个参数。$this->$n=$v; 如果 把n前面的$符号去掉 则相当于是之前的 age 值是28,
但如果加上$符号 age就会被赋值为29 不加$符号相当于 引用之前的值28 ,综上所述 haha类里面的两个方法中 参数都有$n,调用的与赋值都是 与类自身的属性age相关。核心问题在于__set()方法中 $this对$n的引用,加$符号与不加直接决定了 引用之前的值28还是最后一次赋值29 。
简单点说 就是加了$ 符号 $this的指针指向最新赋值的29 ,如果不加 $this的指针 还是会指向 之前的初始值28
老师我的理解正确吗?
1
收起
正在回答 回答被采纳积分+1
1回答
PHP常用技术与ThinkPHP5框架开发
- 参与学习 人
- 提交作业 225 份
- 解答问题 3372 个
掌握用PHP开发互联网网站的必备功能,掌握当下主流的Linux系统开发,并熟练使用热门框架ThinkPhp开发电商团购项目,是通向PHP工程师必经之路。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星