[PHP]関数の外と中で、同じ名前の変数を定義したときの振る舞いは?

PHPでは変数のスコープに、グローバルは変数と、関数内のみ有効な変数があります。
この2つの間で同じ変数名を定義することは可能ですが、それらは別々のものとみなされます。

$a = 10;
function func() {
    $a = 20;
    return $a;
}
 
func();
echo $a;



上記コードを実行した場合、echo $aで見ているのはグローバル変数です。
一方で、funcの中で利用している変数はローカル変数なので、グローバル変数の値は上書きされません。
このため、このプログラムの実行結果は10です。


上記の例で、関数func()の中からグローバル変数を参照したい場合は、下記のようにglobalキーワードを利用します。

$a = 10;
function func() {
    global $a;
    $a = 20;
    return $a;
}
 
func();
echo $a;



この場合の実行結果は20になります。これはfunc()の中でグローバル変数の$aを10から20に変更しているためです。

関連記事

コメントを残す

メールアドレスが公開されることはありません。