次の 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
移動することで問題を解決したようです。global
if
class test
{
function do_it_to_it(){
if(somecondition){
global $path;
$path = 'path/to/goodies';
require_once('some_file');
}
}
}
なぜこれが修正されるように見えるのですか?このif
ステートメントにより、元のglobal
宣言が何らかの形で範囲外になりますか?