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などの別の関数で使用すると、エラーが発生し、何も表示されません。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 に答える