PHP内核介绍及扩展开发指南—类和对象

文章来源:http://stblog.baidu-tech.com/?p=613

 

 

类和对象(TODO)

附录A.       Extension的编译

Extension的编译是比较简单的,下面是个示例Makefile:

PHP内核介绍及扩展开发指南—类和对象_第1张图片

这将创建一个可动态加载的Extension模块,如果想将Extension静态编译进PHP,就需要使用PHP本身的编译系统,这里不作介绍。

另外,Zend提供了一个小脚本来简化创建和编译Extension的过程,可以在《PHP手册》的相关章节找到其使用方法。

目前,Zend正在开发一个更加完善和标准的Extension生成工具,可以在这里找到它:http://pecl.php.net/package/PECL_Gen

附录B.       Extension的加载过程

Extension有两种加载方式,通过php.ini在启动时加载或是通过dl()函数在运行时加载,前者需在php.ini中添加一行命令:extension=myext.so。这两种方式最后都将调用一个名为php_ld()的内部函数。

php_ld()首先调用系统例程加载动态库,之后解析并执行get_module()函数来获得模块的zend_module_entry结构(参见2.1.3)。

然后,调用函数zend_register_module_ex()来注册模块,这个函数先将模块的zend_module_entry加入到一个名为module_registry的HashTable中,然后调用zend_register_functions将模块导出的函数加入CG(function_table)(参见2.5)这个HashTable中,这样我们就可以调用模块导出的函数了。最后,php_ld()将调用模块的启动函数(参见2.4)来初始化模块。

如果模块是dl()动态加载的,Zend还将接着调用模块的激活函数,因为当前显然有页面在运行。

最后要说明的是,通过dl()加载的模块称为“临时模块”,在页面执行完毕时将被卸载,同时,其创建的常量和资源也将被销毁。

 

你可能感兴趣的:(PHP,Module,扩展,Zend,makefile,extension)