我编写了一个名为sample_isset的pecl函数,其代码为:
PHP_FUNCTION(sample_isset) {
zval **fooval;
if(EG(active_symbol_table) == NULL) {
php_printf("the active symbol table is NULL");
}else if(zend_hash_find(EG(active_symbol_table),"foo",4,
(void **) &fooval) == SUCCESS){
php_printf("Got the value of $foo!");
} else {
php_printf("$foo is not defined!");
}
}
我想使用此函数来查看当前符号表是否有$ foo变量。 当我在全球范围内使用它时,它运作良好。 但是当我在另一个函数中使用它时,例如hello,我会出错,什么也看不见。 hello函数可能是这样的。
function hello(){
sample_isset();
}
我不知道为什么会收到错误。
答案 0 :(得分:1)
似乎php函数使用延迟加载,active_symbol_table并不总是存在,所以你应该在EG(active_symbol_table)之前使用zend_rebuild_symbol_table。