2017-02-03 16 views
0

簡単な質問 - 他の人のコードと一緒に作業しています。私は、初期化が関数内の 'グローバル'キーワードに暗示されているかどうかPHPに疑問を抱いています。すなわちに....私は、彼らが使用されるベーススコープ内の変数を初期化することを好むPHPのグローバルスコープと変数の初期化

// some code 
$foo = ""; // any initialization value 
function myFunc() { 
    global $foo; 
} 
// other code 

// some code 
function myFunc() { 
    global $foo; 
} 
// other code 

が合理的に似て...であるが、上述したように、それがために私を必要としますこの場合は外部コードを変更してください。

答えて

0

globalステートメントは、現在の関数が変数を参照するときに、ローカルスコープではなくグローバルスコープで変数にアクセスすることを示しています。変数自体の値には何の影響もありません。

つまり、その関数内の$fooへの参照は、$GLOBALS['foo']と同等に扱われるべきであることをPHPに伝えます。これを割り当てると、グローバル変数が割り当てられ、そこから読み取るとグローバル変数にアクセスします。

+0

いいですが、私はそれほど多くを既に推測しています。 2つは本質的に同等か否か?例えば$ foo = ""が最初の例の関数の中にあるとします。 – Scott

+0

私が持っている問題を見てください。この古いコードは、まだevalsを使ってPHPでサポートされていないものをやろうとしているという点で醜いです。私たちはそれらを取り除く過程にありますが、それは大きな仕事です。この場合、部分 'eval'dは関数呼び出しでラップされます。したがって、追加関数を追加してグローバル変数をグローバルスコープ関数に追加すると、同じ変数に別のグローバル参照を追加しない限り、evalコードは使用できません。私の質問は、これが頭痛を引き起こすかどうかです。やがて私たちはすべての駄目なものを取り除きますが、その間に私はできる限り最善のものに対応しなければなりません。 – Scott

+0

関数内で代入を実行すると、グローバル変数に代入されます。これは必要に応じて変数を作成します。しかし、グローバルなステートメントだけでは、変数が作成されません。 – Barmar