当我使用EG(active_symbol_table)时,我收到错误

时间:2012-10-22 01:57:06

标签: pecl

我编写了一个名为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();
}

我不知道为什么会收到错误。

1 个答案:

答案 0 :(得分:1)

似乎php函数使用延迟加载,active_symbol_table并不总是存在,所以你应该在EG(active_symbol_table)之前使用zend_rebuild_symbol_table。