Globals

在 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环境下,不会是全部的进程都能初始化。

要定义构造以及析构函数:

相关文章
相关标签/搜索