初步接触了php开发以及php扩展的相关内容,发现extending and embeded php这本书很不错,很多问题也讲的非常透彻。这里把读到的一些书中的内容和自己的实践结合起来展示一下,既是给自己留档,也是抛砖引玉,期待php大牛的指导。
extending and embeded php这本书还有一个中文版,有些东西新一些,也可以参考下:
http://www.walu.cc/phpbook/preface.md
这本书主要讲两个方面:
-
如何通过添加函数、类、资源和流的方式来扩展php
- 如何把php语言嵌入到其他应用中去
那么为什么需要php扩展呢?:
-
连接额外的库,并以api的形式提供给用户空间的脚本。比如被封装好的mysql
-
- 是在第三方的库和php的核心之间提供一种扩展,因此php被称为是胶水语言
-
进行特殊的内部操作,比如声明超级变量,用户空间因为安全原因是有限制的。比如php的advanced php debugger 和runkit主要就是干这个的
-
速度原因:令牌化、编译、运行,Opcode可以缩减前两步,但是执行这一步的话还是变成C code比较好。
-
在不暴露出源码的情况下提供功能
下图中给出了php的总体结构:
其中各部分模块的功能如下:
SAPI:是跟web server的接口层
PHP Core:对于核心事件的连接层,处理类似于文件处理、错误处理这类操作
Zend Engine:把脚本编译成机器语言,执行bytecode,读入写出用户空间变量,控制程序流,解析扩展。
TSRM:thread safe resource management:使得一个单个的php实例具有能够同时处理很多独立的请求的能力
这本书分成了三个部分,第一个部分是对php的重新介绍,主要叙述了php的解释器如何黏合在一起。第二个部分则主要在讲php的扩展,所涉及的方面如下:
- PHP API 一些php内部的函数和宏
- 如何把php脚本转换成c code:每个php的脚本的背后都牵涉到了c语言的相应处理,这种对应关系对扩展的开发十分有用
- 执行那些用户空间不可能的操作:很多时候需要执行一些类似于超级变量这种在用户态无法完成的动作,这个时候需要利用扩展进行相应的处理。
而第三个部分则是叙述如何把php嵌入到相应的应用中去: