Globals

在 php_extname.h 中,声明全局变量:

112136_agJo_877598.png

112347_Y5EO_877598.png

112302_E4AK_877598.png

zend_demoa_globales

在 php_extname.h 中,添加:

112609_tZnt_877598.png

这将允许任何包含 php_extname.h 的位置都可以使用 全局变量。

在ZTS下,命名为 extname_globals_id 的一个整数;非ZTS下,命名为 extname_globals 的 zend_extname_globals类型。

113633_Hsl4_877598.png

在 php_extname.h 中,定义一个名称为 EXTNAME_G 的宏:

132016_eiAR_877598.png

在ZTS和非ZTS中,访问全局变量。都可以使用 EXTNAME_G(var1)

 

现在已经声明了聚合全局变量和包含全局变量的 变量 的类型,必须定义全局变量。

接下来,在 extname.c 中添加:

132309_k7Nq_877598.png

这就产生了一个对 extname_globals_id 或者 extname_globals 的定义。

132551_r0FP_877598.png

如果不需要对变量进行任何启动操作,那么在非zts构建中就已经有了函数扩展全局变量。

如果还需要初始化一些扩展全局变量(例如,为var2扩展全局分配一些内存)——这是由全局构造函数和销毁器完成的。

为了让它在ZTS的构建中起作用,并允许这样的操作,将以下内容添加到zend_module_entry:

132938_pm7H_877598.png

注意:不要使用 ZEND_INIT_MODULE_GLOBALS/ts_allocate_id 。如果使用了共享扩展,那么在模块卸载之后,它们将引发调用析构函数的尝试。

不要在 MINIT (EXTNAME_G(var_ptr) = NULL)中初始化全局变量,因为在ZTS环境下,不会是所有的进程都能初始化。

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

140022_uysh_877598.png

140050_nlRh_877598.png

140145_acn6_877598.png

140247_CS5N_877598.png

转载于:https://my.oschina.net/u/877598/blog/1581493

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值