微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP 对象继承的机制

  1. 看yii源码时候,在看run方法的时候 ,有一个handleRequest方法,写在baseApplication,调用他的this指得是webApplication ,对此产生了疑问 。上网查了PHP对象继承,$this指向问题。如下
  2. https://zhidao.baidu.com/question/558306279.html
  3. https://www.oschina.net/question/1259433_125564?sort=time&p=1
  4. https://blog.csdn.net/dyw_666666/article/details/79782995
  5. https://blog.csdn.net/u013756836/article/details/106565012/?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-7  (通过源码分析的,源码现在看不懂,有机会在研究,把其中一部分复制出来方便查看)
  6. 当类存在继承关系时,操作方式是:将属性父类复制到子类 。子类会将父类的公共、受保护的属性值数组全部合并到子类中,然后将全部属性的zend_property_info哈希表也合并到子类中。合并非静态属性default_properties_table: 首先申请一个父类+子类非静态属性大小的数组,然后先将父类非静态属性复制到新数组,然后再将子类的非静态数组接着父类属性的位置复制过去,子类的default_properties_table指向合并后的新数组,default_properties_count更新为新数组的大小,最后将子类旧的数组释放。
  7.  

     

  8. 父类属性不与子类冲突 且 父类属性是私有: 即父类属性为private,且子类中没有重名的,则将此属性插入子类properties_info,但是更新其flag为ZEND_ACC_SHADOW,这种属性将不能被子类使用;
    父类属性不与子类冲突 且 父类属性是公有: 这种比较简单,子类可以继承使用,直接插入子类properties_info;
    父类属性与子类冲突 且 父类属性为私有: 不继承父类的,以子类原属性为准,但是打上ZEND_ACC_CHANGED的flag,这种属性父子类隔离,互不干扰;
    父类属性与子类冲突 且 父类属性是公有或受保护的:
    父子类属性一个是静态一个是非静态: 编译错误
    父子类属性都是非静态: 用父类的offset,但是值用子类的,父子类共享;
    父子类属性都是静态: 不继承父类属性,以子类原属性为准,父子类隔离,互不干扰;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐