PHP 扩展与 ZEND 引擎的整合

PHP 扩展与 ZEND 引擎的整合这些内容并不复杂 在开发 PHP 扩展时只要愿意去了解一下相关的部分就可以了 在这里 我给出一个简单的介绍

欢迎大家来到IT世界,在知识的湖畔探索吧!

PHP 扩展是对 PHP 功能的一个补充,编写完 PHP 扩展以后, ZEND 引擎需要获取到 PHP 扩展的信息,比如 phpinfo() 函数是如何列出 PHP 扩展的信息,PHP 扩展中的函数如何提供给 PHP 程序员使用,这些是开发 PHP 扩展需要了解的内容。

这些内容并不复杂,在开发 PHP 扩展时只要愿意去了解一下相关的部分就可以了,在这里,我给出一个简单的介绍。

PHP 扩展中负责提供信息的结构体为 zend_module_entry,该结构体的定义如下:

struct _zend_module_entry { unsigned short size; unsigned int zend_api; unsigned char zend_debug; unsigned char zts; const struct _zend_ini_entry *ini_entry; const struct _zend_module_dep *deps; const char *name; const struct _zend_function_entry *functions; int (*module_startup_func)(INIT_FUNC_ARGS); int (*module_shutdown_func)(SHUTDOWN_FUNC_ARGS); int (*request_startup_func)(INIT_FUNC_ARGS); int (*request_shutdown_func)(SHUTDOWN_FUNC_ARGS); void (*info_func)(ZEND_MODULE_INFO_FUNC_ARGS); const char *version; size_t globals_size; #ifdef ZTS ts_rsrc_id* globals_id_ptr; #else void* globals_ptr; #endif void (*globals_ctor)(void *global); void (*globals_dtor)(void *global); int (*post_deactivate_func)(void); int module_started; unsigned char type; void *handle; int module_number; const char *build_id; };

欢迎大家来到IT世界,在知识的湖畔探索吧!

有了上面的结构体以后,那么 PHP 扩展的信息就已经有了,那么就可以将该结构体的信息提供给 ZEND 引擎,获取该结构体信息的函数为 get_module(),该函数的定义如下:

欢迎大家来到IT世界,在知识的湖畔探索吧!#define ZEND_GET_MODULE(name) \ BEGIN_EXTERN_C()\ ZEND_DLEXPORT zend_module_entry *get_module(void) { return &name_module_entry; }\ END_EXTERN_C()

get_module() 函数返回一个 zend_module_entry 结构体的指针,通过 完成字符串的拼接,然后通过 & 取地址符获得结构体的内容即可。

通过这两部分就可以完成 PHP 扩展到 ZEND 引擎的整合,不过好在 zend_module_entry 结构体会由扩展模板生成工具进行填充,而 get_module() 函数也不需要我们自己去调用,但是整合的原理还是要大体了解一下的,具体信息可以阅读相关的源码去进行理解。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/99984.html

(0)
上一篇 1天前
下一篇 1天前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信