3-19练习关于$this的引用

3-19练习关于$this的引用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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;

http://img1.sycdn.imooc.com//climg/5cd985ef0001740007760671.jpg

如果这里不加$符号 相当于 一个 公共的属性$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回答
好帮手慕查理 2019-05-14 09:51:58

您好,__set方法中如果是使用$this->n=$v;,其实是赋值失败,所以用的是原来的值。同学可以输出一下$this->n,查看下效果。祝学习愉快!

  • 提问者 代码两万行 #1
    嗯嗯 我知道赋值失败~老师我上面理解的正确吗?这个逻辑
    2019-05-14 19:38:27
  • 好帮手慕查理 回复 提问者 代码两万行 #2
    您好,正确哦~祝学习愉快!
    2019-05-15 09:33:42
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师
插入代码