首页 存档 技术 查看内容

PHP7拓展开发(二):配置项与全局数值

2018-3-30 13:00 |来自: 互联网 275 0

摘要: 起步 Zend引擎提供了另种管理设置值(INI)的途径。现在弄个简单的,我们经常看到php.ini里有诸如display_errors = On这样的全局设置。假设我们需要为我们拓展定义一个值:hello.greeting并用函数hello_ini()返回它的 ...

起步

Zend引擎提供了另种管理设置值(INI)的途径。现在弄个简单的,我们经常看到php.ini里有诸如display_errors = On这样的全局设置。假设我们需要为我们拓展定义一个值:hello.greeting并用函数hello_ini()返回它的内容。

在php.ini:

[hello]
hello.greeting=1

为了避免命名空间的冲突,我们拓展的名字作为所有值的前缀。仅仅是一种约定,一个句点用来分隔拓展名和说明性的初始设定名字。


声明变量 php_hello.h

ext_skel工具初始化的拓展有个好处就是它能帮我们在特定的位置写上注释。

/*
  Declare any global variables you may need between the BEGIN
  and END macros here:

ZEND_BEGIN_MODULE_GLOBALS(hello)
  zend_long global_value;
  char *global_string;
ZEND_END_MODULE_GLOBALS(hello)
*/

这是说如果我们需要声明全局变量,需要将放置在BEBIN与END之间。并提供了示例,因此在这边添加:

ZEND_BEGIN_MODULE_GLOBALS(hello)
  zend_long greeting;ZEND_END_MODULE_GLOBALS(hello)

ZEND_BEGIN_MODULE_GLOBALS()ZEND_END_MODULE_GLOBALS()用来创建一个名为zend_hello_globals的结构,它包含一个long型的变量。然后有条件地将HELLO_G()定义为从线程池中取得数值,或者从全局作用域中得到-如果你编译的目标是非多线程环境。

工具还为我生成了:

/* Always refer to the globals in your function as HELLO_G(variable).
  You are encouraged to rename these macros something shorter, see
  examples in any other php module directory.
*/#define HELLO_G(v) ZEND_MODULE_GLOBALS_ACCESSOR(hello, v)#if defined(ZTS) 
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部