ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

PHP 对象继承的机制

2020-06-22 19:02:22  阅读:247  来源: 互联网

标签:父类 继承 子类 静态 数组 机制 PHP properties 属性


  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,但是值用子类的,父子类共享;
    父子类属性都是静态: 不继承父类属性,以子类原属性为准,父子类隔离,互不干扰;

标签:父类,继承,子类,静态,数组,机制,PHP,properties,属性
来源: https://www.cnblogs.com/bneglect/p/13178527.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有