PHP的变量符号表是通过哈希表来维护,首先介绍一下再PHP扩展中如何创建一个新的变量。PHP变量介绍,请看我上一篇文章,《深入PHP内核- 弱类型变量原理探究》。
[php]view plaincopy
1. ZEND_FUNCTION(variable_creation)
2.{
3. zval *new_var1, *new_var2, *new_var3; //创建两个新的变量容器
4.char *string_contents = "This is a new string variable";
5.
6. MAKE_STD_ZVAL(new_var1); //为new_var1申请空间并初始化
7. MAKE_STD_ZVAL(new_var2);
8.
9. ZVAL_LONG(new_var1, 10); //设置new_var1并赋值为long
10. ZVAL_LONG(new_var2, 5);
11. ZVAL_STRINGL(new_var3, string_contents, sizeof(string_contents), 0); /
/设置new_var3为字符串
12.
13. ZEND_SET_SYMBOL(EG(active_symbol_table), "local_variable", new_var1);
//设置long_variable为函数variable_creation的局部变量
14. ZEND_SET_SYMBOL(&EG(symbol_table), "global_variable", new_var2);
//设置global_variable为全局变量
15.
16. zend_hash_update(
17. &EG(symbol_table),
18."new_var3",
19. strlen("new_var3") + 1,
20. &new_var3,
21. sizeof(zval *),
22. NULL
23. );
24.
25. RETURN_NULL();
26.}
这里的zend_hash_update会更新变量符号表。PHP的数组也是用哈希表来维护,下面通过操作一个array来解释如何使用哈希表来才做数组。
增加一个关联数组:
[php]view plaincopy