php 一个容易被混淆的概念,深入理解成员变量和 属性。 [ 2.0 版本 ]
今天测试了一下,确实误人子弟了,去年测试的,我记得是这个结果,还整理出来了,去年的php环境找不到了,不知道是我老了,记性不好,还是php环境的配置问题,代码抹了。
对不住了。
多谢几位提意见。
Fecshop 深圳
注册时间:2016-01-21
最后登录:2024-08-13
在线时长:73小时36分
最后登录:2024-08-13
在线时长:73小时36分
- 粉丝157
- 金钱2381
- 威望490
- 积分8011
热门源码
- 基于 Yii 2 + Bootstrap 3 搭建一套后台管理系统 CMF
- 整合完 yii2-rbac+yii2-admin+adminlte 等库的基础开发后台源码
- 适合初学者学习的一款通用的管理后台
- yii-goaop - 将 goaop 集成到 Yii,在 Yii 中优雅的面向切面编程
- yii-log-target - 监控系统异常且多渠道发送异常信息通知
- 店滴云1.3.0
- 面向对象的一小步:添加 ActiveRecord 的 Scope 功能
- Yii2 开源商城 FecShop
- 基于 Yii2 开发的多店铺商城系统,免费开源 + 适合二开
- leadshop - 基于 Yii2 开发的一款免费开源且支持商业使用的商城管理系统
共 9 条评论
..感觉误人子弟。才不是什么优先级问题,
__get
魔术方法本来就是获取不存在的属性(包括proteced private都属于不存在)时候才会调用,你都public $age
了,当然不会调用__get
方法__get
魔术方法就是获取不存在的属性(包括proteced private都属于不存在)?回答:首先
__
a).get 魔术方法是获取不存在的成员变量,而不是属性。对于什么是成员变量,什么是属性,您自己查看资料.
b) .proteced private 都属于不存在,你说的是访问权限,对外部访问不存在,但是在对象内部访问呢?如果我在对象的一个方法中访问,是否不存在,我所说的是优先级的问题,你说的是权限问题,对于你说的 (感觉误人子弟。才不是什么优先级问题),我想问的是,他们是否有优先级?
成员变量,也就是在类中定义的变量,如果成员变量找不到,就会通过魔术方法去找成员变量,
如果还是找不到,就会查找属性(这里的属性,确切的说是,不是成员变量的属性,也就是get set方法的属性),这是一个优先级的问题。
不是很明白 yidashi表述的重点是什么,你表述的观点是:没有优先级问题?
一个比较实用的就是:对于一个属性,我定义了get方法,但是我通过属性的方式访问为什么没有执行,这是因为get方法,是没有魔术方法的优先级高,执行了魔术方法。
对于有没有误人子弟,可以自己试试,实践得真知,哪里不对的,贴出来运行结果,在讨论。
补充一下:成员变量,也就是在类中定义的变量,属于类的属性,
对于get,set方法,也就是类的属性。
但是属性不一定是成员变量,也就是说get set方法定义的属性,不是成员变量。
哦。。。。。。
public function setScore($score){ $this->age = 22; }
这个是什么意思。set..的用法是什么
我故意这样写的,当我执行$ob->score = 55,其实并没有赋值,而是把成员变量age的值改了,我想说明的是,有一些代码看到的是一个属性的赋值,其实,可能并不仅仅是赋值,可能压根就没有赋值。
虽然在逻辑上面,上面的写法有问题,但是在语法方面是没有问题的,举这个例子,只是为了更好的理解。
转载之前请确定是正确的再转载,谢谢!
这是本人原创,哪里有错误,您把错误点指出来,不要和一楼一样,请给予详细的错误分析。到底哪里存在错误。
不要扔下一句话,说我误人子弟,说我的文章有错误,说我的话题不对,请把错误点指出来。
原创地址:http://blog.csdn.net/terry_water/article/details/49817899
这个是我的博客。
说我文章存在问题的,请给予详细的分析,像在知乎那样负责的回答问题,如果您指出明确的问题点,我很感谢帮助我扫盲。
$ob = new $ob();
你这个对吗?根据你的写法:
echo $ob->score;
这个不会报错吗?@桃小薇 $ob = new ob; 已修正语法。
这种帖子属于话题,请下次发到话题模块中,感谢配合
你们的举报功能,怎么一点就举报了,不需要确认,误点了举报。
@xiaoshenzhen 举报过的帖子我们会亲自审核的,误点了帖子不会受影响。