过滤器和上下文可以让普通的流类型行为被修改, 或通过INI设置影响整个请求, 而不需要直接的代码修改. 使用本章设计的计数, 你可以使你自己的包装器实现更加强大, 并且可以对其他包装器产生的数据进行改变. 接下来, 我们将离开PHPAPI背后的工作, 回到php构建系统的机制, 产生更加复杂的扩展链接到其他应用, 找到更加容易的方法, 使用工具集处理重复的工作.
无论是暴露远程网络I/O还是本地数据源的流资源, 都允许你的扩展在核心数据上挂在操纵函数的钩子, 避免重新实现单调的描述符管理和I/O缓冲区工作. 这使得它在用户空间环境中更加有用, 更加强大. 下一章将通过对过滤器和上下文的学习结束流包装层的学习, 过滤器和上下文可以用于选择默认的流行为, 甚至过程中修改数据.
本章中你接触了一些基于流的I/O的内部表象. 下一章将演示做呢样实现自己的协议包装, 甚至是定义自己的流类型.
在这章,你探索了PHP中最古老的特性,也可以说是PHP健壮可移植性的最大的问题所在。对于每个有用的INI设置,它对编程的障碍就是随时都会出现它,这让编程越来越复杂。INI设置是一把双刃剑,所以在使用之前一定要深思熟虑,不然造成的后果将是长久的;胡乱使用将使你的系统出现很多不可预测的问题。 在接下来的三章中,你将专研数据流API,从使用开始,进一步提升到数据流的实现层,包装、环境以及过滤器
通过本章的课程,我们深入了解了PHP的生命周期,常量、全局变量和超级全局变量的定义和使用。在下一章中,你会学会如何声明和使用的php.ini值。
有关面向对象的资料实在是太多了,我也是才学而已,没有办法给出非常系统、完整的阐述,但以后我会陆陆续续的在博客里写出来的。此外,强烈建议大家看看php官方的这篇wiki。 internals:engine:objects
这一章是我自己写的,如果有什么错误,还请大家指正。这章主要介绍了类与接口的定义,在下一章将看一下如何对类进行操作,比如调用方法、修改属性等。
通过这一章介绍的技术,我们已经可以使用PHP中{资源}了,这将使我们更容易的在扩展中使用一些第三方库,比如使用zip扩展时,我们需要把它的一些特殊的量封装成资源供脚本使用。这无疑极大的增强了PHP的威力!{资源}V5! 下一章将会说一下PHP中的对象!原书中分别讲述了PHP4与PHP5的实现,这里我没有参照原书的安排,按照自己的理解完全重写了这一部分,以PHP5为基础讲述,确切的说,是以PHP5.
我们用了很长的篇幅在这一章描述内核中的HashTable结构以及PHP中的数组实现。在接下来的时间中,我们会在它的基础上学习一下内核是怎样实现与管理PHP语言中的资源与类的。
现在我们已经可以编写一个更真实的函数了,既可以接收用户传递过来的参数,也可以返回数据给调用者。为了写出高质量的代码,还需要我们多花点心思在zval的写时复制等特殊机制上,否则便会在接收参数和返回数据时留下一些bug。 下面的章节里,让我们去看一下PHP语言里强大的数组类型是如何在内核中实现的,去探究内核中的HashTable结构,从而能编写出更强大的PHP扩展。
在这一章里,我们集中讨论了如何把函数执行的结果返回给调用者,通过return语句、引用返回、通过参数返回等等,而且还初步了解了一下zend_arg_info。在下面的章节中,我们将去看一下内核是如何接收调用者传递的参数的。
在这一章里,我们学会了如何创建一个PHP框架并为其添加函数,并编译到PHP中供用户在PHP语言中调用。在接下来的章节里,我们将陆续看到许多高级的PHP内核特性,从而使我们编写出更好的PHP扩展。 编译PHP源码的环境会随着平台与时间的不同而变化,如果本章讲述的知识无法使你顺利的编译PHP,那你可以给我发信,或者去php.net寻找答案,当然最简单的方法是Google,切记的是,万一Google抽风
单就开发一个最基本的php扩展来说,该掌握的前置知识我们已经都掌握了。在接下来的章节里我们将会深入的研究如何制作一个PHP扩展,以及制作一个优秀的PHP扩展所需的其它知识。 此外,如果你只想把PHP当作一个嵌入式应用来使用,我们也强烈的建议你不要直接跳到最后几章,因为在接下来的章节里我们将详细的介绍与PHP内核密切相关的一些内容,比如HashTable、数组、对象......等等的实现方式与应用方
PHP是一种解释型的语言,对于用户而言,我们精心的控制内存意味着easier prototyping和更少的崩溃!当我们深入到内核之后,所有的安全防线都已经被越过,最终还是要依赖于真正有责任心的软件工程师来保证系统的稳定运行。
在这一章我们了解了php变量在内核中是如何实现的,我们已经可以识别出一个变量的类型,把它加到符号表去或者从符号表中找出等等等等。在下一章我们的目光开始转向内存,顺道研究下怎样复制已经存在的zval,以及如何在它们没用的时候及时的清理掉,还有最重要的,怎么不使用copy,而使用引用! 我们已经了解到zend引擎中针对一个请求的内存管理层,了解了常驻内存与非常驻内存的概念与区别。在读完下一章后,我们便