通常、関数外で定義された変数の値は関数外でのみ、関数内で定義された変数は関数内でのみ使用可能です。
正確には使用可能ですが全く別の変数として扱われます。
ソースコード
$i = 10;
function func1 () {
$i = $i * 2;
}
function func2 () {
global $i;
$i = $i * 2;
}
function func3 () {
$GLOBALS["i"] = $GLOBALS["i"] * 2;
}
func1();
print "\$i の値は $i です。<br>\n";
func2($i);
print "\$i の値は $i です。<br>\n";
func3($i);
print "\$i の値は $i です。<br>\n";
出力結果
$i の値は 10 です。
$i の値は 20 です。
$i の値は 40 です。
func1 では関数内の変数 $i は関数内でのみ有効ですので関数外の $i の値は変化なく「10」のままです。
func2 の中では $i の値を使うために global で宣言しています。こうすることで func2 の中の変数 $i の値は1行目で代入されている「10」となり、関数内で2倍され「20」になります。
func3 ではPHP内部で定義されている連想配列 $GLOBALS を使って func2 と同等の処理を行っています。$i の値は func2 で「20」になっているので func3 ではまた2倍され「40」となります。 |