- 看yii源码时候,在看run方法的时候 ,有一个handleRequest方法,写在baseApplication,调用他的this指得是webApplication ,对此产生了疑问 。上网查了PHP对象继承,$this指向问题。如下
- https://zhidao.baidu.com/question/558306279.html
- https://www.oschina.net/question/1259433_125564?sort=time&p=1
- https://blog.csdn.net/dyw_666666/article/details/79782995
- https://blog.csdn.net/u013756836/article/details/106565012/?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-7 (通过源码分析的,源码现在看不懂,有机会在研究,把其中一部分复制出来方便查看)
- 当类存在继承关系时,操作方式是:将属性从父类复制到子类 。子类会将父类的公共、受保护的属性值数组全部合并到子类中,然后将全部属性的zend_property_info哈希表也合并到子类中。合并非静态属性default_properties_table: 首先申请一个父类+子类非静态属性大小的数组,然后先将父类非静态属性复制到新数组,然后再将子类的非静态数组接着父类属性的位置复制过去,子类的default_properties_table指向合并后的新数组,default_properties_count更新为新数组的大小,最后将子类旧的数组释放。
-
-
父类属性不与子类冲突 且 父类属性是私有: 即父类属性为private,且子类中没有重名的,则将此属性插入子类properties_info,但是更新其flag为ZEND_ACC_SHADOW,这种属性将不能被子类使用;
父类属性不与子类冲突 且 父类属性是公有: 这种比较简单,子类可以继承使用,直接插入子类properties_info;
父类属性与子类冲突 且 父类属性为私有: 不继承父类的,以子类原属性为准,但是打上ZEND_ACC_CHANGED的flag,这种属性父子类隔离,互不干扰;
父类属性与子类冲突 且 父类属性是公有或受保护的:
父子类属性一个是静态一个是非静态: 编译错误;
父子类属性都是非静态: 用父类的offset,但是值用子类的,父子类共享;
父子类属性都是静态: 不继承父类属性,以子类原属性为准,父子类隔离,互不干扰;
相关文章
- 10-04面向对象的三大特征—继承,this、super关键字,方法重写,以及方法重写与重载的区别
- 10-04Qt刷新机制的一些总结(Qt内部画的时候是相当于画在后台一个对象里,然后在刷新的时候调用bitblt统一画,调用window的api并不会影响到后面的那个对象)
- 10-04面向对象的三大特征之继承
- 10-04浅析Spring Bean的循环依赖问题、单例对象初始化三步、spring的三级缓存+提前曝光机制
- 10-04前端第27次总结-节点、快捷尺寸、获取样式的方法、键盘事件、面向对象、原型、原型链、安全类、内置的构造函、继承、BOM、Git、touch事件、动画、zepto、touch
- 10-04QT +坐标系统 + 自定义控件 + 对象树的验证(自动进行析构)_内存回收机制
- 10-04继承自CCObject的对象成员变量出错或者为空的问题
- 10-04javascript-快速查看Rhino Shell中的对象(等同于PHP var_dump?)
- 10-04objective-c自学总结(三)---面向对象的封装,继承与多态
- 10-04多机对象存储的实现机制