3

次の php クラスを使用します。

 class test
 {
    function do_it_to_it(){
        global $path;

        if(somecondition){
           $path = 'path/to/goodies';
           require_once('some_file');
        }
    }
 }

「some_file」の内容は次のとおりです。

global $path;
define('GOODIEPATH', $path); 

今私は電話します:

$t1 = new test();
$t1->do_it_to_it();

「some_file」の $path は、「path/to/goodies」ではなく null になります。これは、何らかの理由で $path が 2 番目の「グローバル $path」によって上書きされているか、何らかのグローバル スコープの問題が原因であると感じています。ここで何が欠けていますか?

PS - 私は誰よりもグローバルが嫌いですが、この場合、レガシー コードを壊さずに修正することはできません。

編集:実際のコードに存在testするステートメントを表示するために、上記のクラスを修正しました。次のように、ステートメントをステートメント内にif移動することで問題を解決したようです。globalif

class test
{
   function do_it_to_it(){

     if(somecondition){
        global $path;
        $path = 'path/to/goodies';
        require_once('some_file');
     }
   }
}

なぜこれが修正されるように見えるのですか?このifステートメントにより、元のglobal宣言が何らかの形で範囲外になりますか?

4

1 に答える 1

1

たとえば、コードのゼロレベルでグローバル変数を定義し、このファイルをすべてのソースに含めることを常にお勧めします。

于 2012-10-05T12:55:28.873 に答える