`
dengbaoleng
  • 浏览: 1162696 次
文章分类
社区版块
存档分类
最新评论

原创:PHP内核研究之类的实现

 
阅读更多

声明:本文为斯人原创,全部为作者一一分析得之,有不对的地方望赐教。

博客地址:PHP技术博客 在CSDN也会同步更新的哦.

欢迎转载,转载请注明出处

这几天比较忙哦..没有时间写..周末了多写几篇吧.

目前大部分语言都支持类.
类是什么?类就是面向对象,简称OOP.英文名字 Object Oriented Programming.
面向对象是什么?是一种编程架构.
OOP的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成,OOP达到了软件工程的三个目标:重用性、灵活性和扩展性.
因为我们讲的不是这里只简单描述,如果你还不知道什么是类,什么是面向对象..那么这篇文章目前不适合你哦.
[php]
class Person{


};
[/php]
上面是创建一个PHP类.class是PHP的关键字.通过它我们就能找到Zend是如何创建类的.


T_CLASS,T_ABSTRACT T_CLASS和T_FINAL 是PHP的三种类的模式
T_CLASS:是一个标准类.
T_ABSTRACT:是声明一个抽象类
T_FINAL:声明一个不容许继承和扩展的类.
当然还有interface
他们定义在Zend/zend_complie.h的文件中





这三个规则 记录当前行,并设置类的类型.
在定义类的时候调用了 zend_do_begin_class_declaration和zend_do_end_class_declaration两个方法,
类的关键字 ,类的名称和所继承的父类作为参数传递给这两个函数.
zend_do_begin_class_declaration是用来声明类,设置类型,创建一个
zend_do_end_class_declaration用来处理类中的属性及方法.
在讲到两个函数之前一定先要说说 保存类的结构zend_class_entry
它定义在Zend/zend.h中




清楚了这个结构之后 下面来看看zend_do_begin_class_declaration函数


lcname = zend_str_tolower_dup(class_name->u.constant.value.str.val, class_name->u.constant.value.str.len);
把所有类全部转换为小写处理.这就是为什么PHP大小写不敏感的原因.
if (!(strcmp(lcname, "self") && strcmp(lcname, "parent"))) {
efree(lcname);
zend_error(E_COMPILE_ERROR, "Cannot use '%s' as class name as it is reserved", class_name->u.constant.value.str.val);
}
类的名字不能是self和parent.
第23-26行 用来检测类名是否重复定义.
第27-37行 用来设置命名空间,这是PHP5.3的新特性
第39-47行 用来抛出重复定义的错误
第49-57行 初始化保存类的结构
zend_initialize_class_data(new_class_entry, 1 TSRMLS_CC);函数是用来初始化结构里面的HashTable,魔术方法.
这个函数里面也有上面提到( HashTable *static_members; //静态成员,当是用户声明的类等于default_static_members,内置的类为NULL)的原因
第58-73行 同样用来检测父类的类名是否包含 保留关键字 self,parent,static
剩下的就是用来生成一个OP,
是内部类:那么生成的OP中间代码就是 ZEND_DECLARE_INHERITED_CLASS
是用户类:OP中间代码就是ZEND_DECLARE_CLASS
在这之后..Zend引擎会调用zend_execute函数执行OP的中间代码ZEND_DECLARE_CLASS_SPEC_HANDLER
它定义在Zend/zend_vm_execute.h中.
这个函数将执行关键代码
EX_T(opline->result.u.var).class_entry = do_bind_class(opline, EG(class_table), 0 TSRMLS_CC) ;
do_bind_class会将此类放到class_table中.当然 ,在这个函数里还会判断该类是否存在.不存在会抛出错误
Internal Zend error - Missing class information for %s
如果存在 则会添加成功
那么到这里类就创建成功了.
下一张节就要深入到 类内部了哦...
分享到:
评论

相关推荐

    ZendAPI:深入PHP内核编程

    ZendAPI:深入PHP内核编程 ZendAPI:深入PHP内核编程 ZendAPI:深入PHP内核编程 ZendAPI:深入PHP内核编程 ZendAPI:深入PHP内核编程

    Linux内核设计与实现(第三版中文高清带目录)_linux_linux内核_

    《Linux内核设计与实现》是理解Linux操作系统内核架构和技术细节的重要参考资料,特别是第三版中文高清版,为读者提供了全面且深入的内核解析。这本书由Robert Love编写,是学习Linux内核不可或缺的经典之作。以下将...

    Linux 内核设计与实现

    《Linux内核设计与实现》是一本深入探讨Linux操作系统内核的权威著作,它为读者提供了全面、细致的Linux内核工作原理分析。通过阅读这本书,你可以了解到Linux内核是如何处理系统调用、管理内存、调度进程、实现文件...

    Linux 4.4.0内核源码分析TCP实现

    Linux 4.4.0 内核源码分析 TCP 实现 Linux 4.4.0 内核源码分析 TCP 实现是关于 Linux 操作系统内核源码中 TCP 协议的实现机理的分析。TCP(Transmission Control Protocol)是一种面向连接的传输层协议,它提供了...

    Windows内核原理与实现.PDF

    《Windows内核原理与实现》不仅适合希望深入了解Windows操作系统工作原理的技术人员阅读,也是一本非常宝贵的参考书目,对于从事操作系统开发和研究的专业人士来说更是不可或缺。通过学习本书,读者不仅可以掌握...

    Linux网络体系结构 Linux内核中网络协议的设计与实现

    通过阅读《Linux网络体系结构:Linux内核中网络协议的设计与实现》,读者可以深入理解Linux网络的工作原理,这对于系统管理员、开发人员和研究人员来说是不可或缺的知识。书中详细解释了内核源码中的关键部分,并...

    Windows内核原理与实现.rar

    《Windows内核原理与实现》是一本深入探讨操作系统核心机制的专业书籍,主要聚焦于微软的Windows内核。这本书详尽地阐述了Windows操作系统的核心架构、设计原则以及实现机制,为读者揭示了系统运行背后的复杂而精细...

    Linux内核设计与实现.pdf

    《Linux内核设计与实现》作为一本广受认可的参考资料,它为希望深入理解Linux操作系统的开发者和研究人员提供了详细的设计原理和实现方法。 在讨论Linux内核设计与实现的知识点之前,需要明确几个概念: 1. Linux...

    《寒江独钓:Windows内核安全编程》源码

    《寒江独钓:Windows内核安全编程》从Windows内核编程出发,全面系统地介绍了串口、键盘、磁盘、文件系统、网络等相关的Windows内核模块的编程技术,以及基于这些技术实现的输入密码保护、防毒引擎、文件加密、网络...

    linux内核设计与实现

    ### Linux内核设计与实现知识点概述 #### 一、Linux内核基础知识 - **定义**:Linux内核是操作系统的核心部分,负责管理系统的硬件资源,为应用程序提供接口。 - **功能**:包括进程管理、内存管理、文件系统、网络...

    Linux网络体系结构:Linux内核中网络协议的设计与实现

    编写本书是为了向学生和专业人员提供在Linux内核中实现网络功能时所需的基础知识,本书也适合所有希望深入理解操作系统内部网络特定进程的人。本书介绍了Linux内核的关键网络组件及机制,同时也介绍了通信系统的设计...

    windows内核研究(部分微软内部资料)

    3. **内存管理**:Windows内核如何分配、回收内存,如何实现虚拟内存,以及页面错误处理机制等,这些都是内核研究的重点。微软内部的资料可能揭示更深层次的设计细节。 4. **设备驱动程序**:内核与设备驱动程序的...

    Linux内核提权攻击研究.pdf

    Linux内核提权攻击研究 Linux操作系统中,提权攻击是一种重要的攻击手段,针对Linux系统的安全性构成了严重的威胁。根据提权攻击所利用的漏洞类型,可以将其分为应用层提权攻击和内核提权攻击。内核提权攻击是指...

    Linux内核源码剖析:TCP IP实现(上册).pdf

    根据提供的文件标题、描述、标签以及部分内容,我们可以推断出这份文档主要关注的是Linux内核中的TCP/IP协议栈实现分析。接下来将详细阐述这一主题下的关键知识点。 ### 一、Linux内核源码剖析概述 #### 1. Linux...

    Linux网络体系结构_Linux内核中网络协议的设计与实现.pdf

    详细描述了linux2.4/2.6内核版本中的网络子系统。解释了协议的工作方式、建立了Linux网络体系结构中的多种重要概念——从设备驱动程序概念一直到应用程序接口的概念。能帮助读者更容易理解 Linux网络架构的进程和...

    Linux内核设计与实现-第三版

    《Linux内核设计与实现》第三版是一本深入探讨Linux操作系统核心的书籍,它基于Linux 2.6.34内核版本,全面覆盖了Linux内核的设计原理和实现机制。本书适合具有一定Linux操作系统知识背景的读者,尤其是对系统编程、...

    Linux内核设计与实现第二版和第三版

    《Linux内核设计与实现》是两本深入探讨Linux操作系统内核的重要著作,分别提供了中文第二版和英文第三版的内容。这两本书详细阐述了Linux内核的架构、工作原理以及实现机制,对于理解Linux系统的核心运作有着极大的...

    Linux内核设计与实现(第三版中文高清带目录).pdf.zip

    《Linux内核设计与实现》是一本深入探讨Linux操作系统内核的权威著作,特别是这个第三版,它提供了关于Linux内核的最新、最全面的信息。这本书对于那些希望理解操作系统核心工作原理,或者需要进行系统级编程和内核...

    Linux内核设计与实现第二版

    《Linux内核设计与实现》是Linux系统领域的一本经典著作,主要针对对操作系统原理感兴趣的开发者、研究人员以及高级用户。这本书深入浅出地讲解了Linux内核的工作原理和设计思想,帮助读者理解如何构建一个现代操作...

Global site tag (gtag.js) - Google Analytics