在 php_extname.h 中,声明全局变量:
zend_demoa_globales
在 php_extname.h 中,添加:
这将允许任何包含 php_extname.h 的位置都可以使用 全局变量。
在ZTS下,命名为 extname_globals_id 的一个整数;非ZTS下,命名为 extname_globals 的 zend_extname_globals类型。
在 php_extname.h 中,定义一个名称为 EXTNAME_G 的宏:
在ZTS和非ZTS中,访问全局变量。都可以使用 EXTNAME_G(var1)
现在已经声明了聚合全局变量和包含全局变量的 变量 的类型,必须定义全局变量。
接下来,在 extname.c 中添加:
这就产生了一个对 extname_globals_id 或者 extname_globals 的定义。
如果不需要对变量进行任何启动操作,那么在非zts构建中就已经有了函数扩展全局变量。
如果还需要初始化一些扩展全局变量(例如,为var2扩展全局分配一些内存)——这是由全局构造函数和销毁器完成的。
为了让它在ZTS的构建中起作用,并允许这样的操作,将以下内容添加到zend_module_entry:
注意:不要使用 ZEND_INIT_MODULE_GLOBALS/ts_allocate_id 。如果使用了共享扩展,那么在模块卸载之后,它们将引发调用析构函数的尝试。
不要在 MINIT (EXTNAME_G(var_ptr) = NULL)中初始化全局变量,因为在ZTS环境下,不会是所有的进程都能初始化。
要定义构造以及析构函数: