在 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環境下,不會是全部的進程都能初始化。
要定義構造以及析構函數: