内核结构的优点(内核原理与实现)
admin
2022-12-28 15:52:30
Pro/E5.0产品设计视频教程_办公百科网  AutoCAD2011机械视频教程_办公百科网

在php中类的定义以class关键字开始,后面接类名,类名可以是任何非PHP保留字的名字。在类名后面紧跟着一对花括号,类的成员函数和成员变量定义在这里。类是一种复合型的结构,其需要存储较多元化的数据,如属性,方法,以及自身的一些性质。如下一段PHP代码:

class ParentClass {
}
 
interface Ifce {
        public function iMethod();
}
 
final class Tipi extends ParentClass implements Ifce{
        public static = aaa;
        const CA = bbb;
 
        public function __constrct() {
        }
 
        public function iMethod() {
        }
 
        PRivate function _access() {
        }
 
        public static function access() {
        }
}这展现了PHP中面向对象编程中的接口,继承,静态成员变量,静态方法,常量,访问控制等内容。这些也许已经比较熟悉了,那么这些结构在Zend引擎内部是如何实现的?类的这些方法、成员变量是如何存储的?这些访问控制,静态成员是如何标记的?

我们在PHP的源码中很容易找到类的结构存放在zend_class_entry结构体中:

    struct _zend_class_entry {
        char type;     // 类型:ZEND_INTERNAL_CLASS / ZEND_USER_CLASS
        char *name;// 类名称
        zend_uint name_length;                  // 即sizeof(name) - 1
        struct_zend_class_entry *parent; // 继承的父类
        intrefcount;  // 引用数
        zend_bool constants_updated;
 
        zend_uint ce_flags; // ZEND_ACC_IMPLICIT_ABSTRACT_CLASS: 类存在abstract方法
        // ZEND_ACC_EXPLICIT_ABSTRACT_CLASS: 在类名称前加了abstract关键字
        // ZEND_ACC_FINAL_CLASS
        // ZEND_ACC_INTERFACE
        HashTable function_table;      // 方法
        HashTable default_properties;          // 默认属性
        HashTable properties_info;     // 属性信息
        HashTable default_static_members;// 静态变量
        HashTable *static_members; // type == ZEND_USER_CLASS时,取&default_static_members;
        // type == ZEND_INTERAL_CLASS时,设为NULL
        HashTable constants_table;     // 常量
        struct _zend_function_entry *builtin_functions;// 方法定义入口
 
 
        union _zend_function *constructor;
        union _zend_function *destructor;
        union _zend_function *clone;
 
 
        /* 魔术方法 */
        union _zend_function *__get;
        union _zend_function *__set;
        union _zend_function *__unset;
        union _zend_function *__isset;
        union _zend_function *__call;
        union _zend_function *__tostring;
        union _zend_function *serialize_func;
        union _zend_function *unserialize_func;
        zend_class_iterator_funcs iterator_funcs;// 迭代
 
        /* 类句柄 */
        zend_object_value (*create_object)(zend_class_entry *class_type TSRMLS_DC);
        zend_object_iterator *(*get_iterator)(zend_class_entry *ce, zval *object,
            intby_ref TSRMLS_DC);
 
        /* 类声明的接口 */
        int(*interface_gets_implemented)(zend_class_entry *iface,
                zend_class_entry *class_type TSRMLS_DC);
 

以上就是PHP100教程之深入理解PHP内核类的结构,希望大家喜欢,请继续关注办公百科网。

相关内容

热门资讯

怎么样的桃花 桃花近看远看的样... 今年的“三八”妇女节,阳光明媚,踏青赏花正当时。遂与姐妹们共赴十里蓝山,与花海来一场春天的约会。十里...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
怎么样的桃花 桃花近看远看的样... 今年的“三八”妇女节,阳光明媚,踏青赏花正当时。遂与姐妹们共赴十里蓝山,与花海来一场春天的约会。十里...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...