変数にはアクセス可能な範囲(スコープ)があります。PHPの変数には2種類のスコープがあり、それぞれグローバルスコープ、ローカルスコープと呼びます。それぞれのスコープで定義する変数を、グローバル変数、ローカル変数と呼びます。PHPでは、関数の外側で宣言した変数はグローバル変数として扱われ、プログラムのどこからでも参照することができます。一方、関数の内側で宣言された変数はローカル変数として扱われ、宣言された関数内からのみ参照できます。
変数の種類について
グローバル変数
グローバル変数とはプログラムのどこからでも参照することができる変数です。
PHPブロックの中はグローバルスコープとされ、PHPブロックの中からならば同じ変数として使うことができます。
ただし関数の中に入るとローカルスコープとなり、グローバル変数をそのまま参照することはできないため注意が必要です。
関数の中でグローバル変数を呼び出す際は global $○○ ; と記載します。
<?php
$hobby = 'ランニング';
function test($name){
global $hobby ;
echo $name . 'は' . $hobby . 'が好きです。';
}
test('山田さん');
?>出力結果
山田さんはランニングが好きです。ローカル変数
ローカルスコープとは関数やクラスのメソッド内のスコープです。
ローカルスコープ内で定義された変数(ローカル変数)は外側からは参照したり、変更することができません。
<?php
function test($name){
$pet = "犬";
echo $name . "さんは" . $pet . "を飼っています。";
}
test("山田");
?>出力結果
山田さんは犬を飼っています。例えば上記の test()関数内で $pet = ねこ; と記載しても、グローバルスコープの $pet を変更したことにはなりません。
ローカル変数 $pet を新しく定義したという扱いになり、この値はローカルスコープ内でしか使えません。
グローバルスコープ内で $pet を呼び出した場合、変わらず「犬」と出力されます。
下記のコードを書いて、実際にどうなるか確認してみましょう!
<?php
$pet = '犬';
function test($name){
$pet = ねこ;
echo $name . "さんは" . $pet . "を飼っています。";
}
test('山田');
echo $pet;
?>エンジニアからのアドバイス
どこからでも参照できるグローバル変数の方が便利に見えるかもしれません。
しかし、同じ変数を使うことによってソースコード内の依存性が高まり、ソースコードが読みにくい・関数やプログラムの動作を追いにくいというデメリットもあります。
