关注LAMP|PHP源代码分析|web架构|PHP扩展|Erlang|服务端架构
PHP扩展之自定义全局变量
原创文章,转载请注明: 转载自庆亮的博客-webgame架构
本文链接地址: PHP扩展之自定义全局变量
跟踪了一下PHP中$_GET、$_POST的产生过程,发现通过zend提供的函数和宏可以很方便注册自己的全局数组。相关的函数和宏:
END_API int zend_register_auto_global(
char *name, //全局数组名
uint name_len, //数组名称长度- 1
zend_auto_global_callback auto_global_callback TSRMLS_DC //数组初始化回调函数
);
#define ZEND_SET_SYMBOL(symtable, name, var) \
{ \
char *_name = (name); \
\
ZEND_SET_SYMBOL_WITH_LENGTH(symtable, _name, strlen(_name)+1, var, 1, 0); \
}
下面来注册我们的全局变量,假设我们的扩展名为test,我们在MINIT中进行注册操作。
zend_bool ming_global_callback(char *name, uint name_len TSRMLS_DC)
{
zval *tmp;
MAKE_STD_ZVAL(tmp);
array_init(tmp);
add_next_index_long(tmp,2222);
ZEND_SET_SYMBOL(&EG(symbol_table), name, tmp);
}
PHP_MINIT_FUNCTION(test)
{
/* If you have INI entries, uncomment these lines
REGISTER_INI_ENTRIES();
*/
zend_register_auto_global("_MING", sizeof("_MING") - 1, ming_global_callback TSRMLS_DC);
return SUCCESS;
}
运行PHP代码
<?php
var_dump($_MING);
结果:
array(1) {
[0]=>
int(2222)
}
| 打印文章 | 这篇文章由庆亮于2009年08月8日 12:45 上午发表在PHP内核与扩展。你可以订阅RSS 2.0 也可以发表评论或引用到你的网站。 |