创建变量(PHP5.x扩展)

这里记录一下如何在PHP5的扩展中创建变量,包括局部变量和全局变量。

必备知识

  1. PHP内部有符号表的概念,其中局部变量存放在指针active_symbol_table中,而全局变量存放在非指针(真实值)symbol_table中。
  2. 使用MAKE_STD_ZVAL宏创建变量。
  3. 使用ZVAL_xxxx宏为创建的变量赋值,当然也可以不赋值,而只是声明。
  4. 使用ZEND_SET_SYMBOL宏设置变量设置成全局还是局部。

1. 局部变量

zval *new_var;
MAKE_STD_ZVAL(new_var);
ZVAL_LONG(new_var, 2000);
ZEND_SET_SYMBOL(EG(active_symbol_table), "aVar", new_var);

上面的代码会创建一个名为$aVar局部变量,它的值是2000。

2. 全局变量

zval *new_var;
MAKE_STD_ZVAL(new_var);
ZVAL_LONG(new_var, 2000);
ZEND_SET_SYMBOL(&EG(symbol_table), "aVar", new_var);

上面的代码会创建一个名为$aVar的全局变量,它的值是2000。在PHP中没有什么是一个宏实现不了的,如果有,那就两个————所以,你看创建一个全局变量要那么多字符,干脆再包装一个宏算了,于是就可以把最后一行替换成

ZEND_SET_GLOBAL_VAR("aVar", new_var);