1

Zend Framework で作成している Web アプリケーションにサードパーティのコードを統合しています。

統合したいコードは、変数をグローバルとして宣言しています。それ自体は機能しますが、Zend Framework に含めると機能しません。最初は、グローバル変数の宣言を無効にしている Zend Framework に何かがあるのではないかと疑っていました。コントローラーに次のテストコードがあります。

public function testglobalAction()
{
   $a = 1;
   function b()
   {
      global $a;
      echo $a*2;
   }

   b();
}

実行すると、2 ではなく 0 が出力されます。さらに、同じ Web サーバーで同じコードを単独で実行すると、2 が出力されます。

Zend Registry を使用するために、すべてのグローバル インスタンスを置き換えることができることを理解しています。ただし、grep を実行すると、約 700 行を変更する必要があることがわかりました。現時点では実行できません。

この問題を解決する方法を知っている人はいますか?

4

2 に答える 2

8

元の $a 変数はグローバルではありません。

メソッド内で宣言された変数は、現在のスコープで以前にグローバルに宣言されていない限り、そのメソッドに対してローカルです。

これを試して

public function testglobalAction()
{
    global $a;
    $a = 1;
    function b()
    {
        global $a;
        echo $a*2;
    }

    b();
}
于 2009-07-30T05:32:34.340 に答える
1

いいえ。 Zend Framework はグローバルを無効にすることはできません。無効にすることはできません。$GLOBALS 配列は、php.iniregister_globalsディレクティブによって制御されます。を使用して実行時に変更することはできませんini_set

参照用のドキュメントを参照してください。

注:ディレクトリごとのphp_valueオーバーライドについては、.htaccess ファイルを確認してください。

于 2009-07-30T04:25:03.760 に答える