在 php_extname.h 中,声明全局变量:php
zend_demoa_globales
在 php_extname.h 中,添加:函数
这将容许任何包含 php_extname.h 的位置均可以使用 全局变量。code
在ZTS下,命名为 extname_globals_id 的一个整数;非ZTS下,命名为 extname_globals 的 zend_extname_globals类型。进程
在 php_extname.h 中,定义一个名称为 EXTNAME_G 的宏:内存
在ZTS和非ZTS中,访问全局变量。均可以使用 EXTNAME_G(var1)class
如今已经声明了聚合全局变量和包含全局变量的 变量 的类型,必须定义全局变量。变量
接下来,在 extname.c 中添加:module
这就产生了一个对 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环境下,不会是全部的进程都能初始化。
要定义构造以及析构函数: