2009-07-30 13 views
1

私はZend Frameworkで書いているWebアプリケーションに第三者コードを統合しています。Zend Frameworkは変数の宣言をグローバルとしてオフにしますか?

私が統合したいコードは変数をグローバルとして宣言します。それはそれ自身で動作しますが、Zend Frameworkに組み込んでも動作しません。最初は、Zend Frameworkにグローバル変数の宣言を無効にする何かがあると思っていました。私は、同じWebサーバのプリントアウト2で独自に同じコードを実行しているその上で2とは対照的に、それは、0出力し実行したとき

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

    b(); 
} 

:私は、コントローラに次のテストコードを持っています。

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

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

+2

グローバルを試してみてはPHPには良いアイデアではありません。 Zendはあなたに恵まれています。 – RaYell

+0

私はこれが最初のコメント/回答であることを知っていました。 :)しかし、私は実際にこのコードを自分のアプリケーションに統合しています。 – Marcel

+1

コントローラーからコードを実行するときにコードを入力します。あなたのサンプルにZFに関連するものは何も表示されません。過単純化=あなたを助けることはできません。 – hobodave

答えて

8

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

メソッド内で宣言された変数は、そのメソッドに対してローカルであるです。が現在のスコープでグローバルに宣言されている場合を除きます。

この

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

    b(); 
} 
+0

さらに、PHPスコープは、内部変数/呼び出し内の外部ローカル変数へのアクセスを防ぎます。これらの変数はアクティブメモリにあり、内部関数が終了します。 – eyelidlessness

+1

ほぼまぶた。 PHP 5.3以前では、 "内部"関数は存在しませんでした。上記のようにメソッド内に関数を定義すると、実際にはグローバルスコープ内の関数を定義しています(testglobalActionを呼び出した場合は致命的なエラーが発生します):b()を再宣言できませんPHP 5.3では、外部スコープからインポートする変数を指定する必要があります。 –

1

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

参照のためdocumentationを参照してください。

注:ディレクトリごとにphp_valueの上書きについて.htaccessファイルを確認してください。

+0

私はregister_globalsを有効にしようとしましたが、同じ結果が得られます。ディレクティブをオーバーライドするphp_valueもありません。 期待される結果である2を出力する同じWebサーバーにテストファイルがあるのは面白いです。しかし、コントローラでそのコードを実行すると、私は1を取得します。 – Marcel