0

我写了一个名为 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 函数可能是这样的。

function hello(){
   sample_isset();
}

我不知道为什么我得到一个错误。

4

1 回答 1

1

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

于 2012-10-23T03:52:47.540 回答