PHPでの変数の利用は一般的な言語とそれほど変わるものではありません。しかし、変数のスコープについては注意しなければならない点があります。グローバル変数の扱いが一般的な言語とやや異なります。
グローバル変数とローカル変数
グローバル変数(大域変数)とはファイル全体で有効な変数のことです。その対義語としてローカル変数(局所変数)があります。ローカル変数の例としてわかりやすいのは関数内の変数です。関数内で使用している変数はその外の変数とは区別され、関数外では同じ名前であっても別の変数になります。
1 2 3 4 5 6 |
function func() { $num = 10; } func(); echo $num; |
この例ではechoときの$numには何も値が入っておらず未定義の変数であるというエラーにとなってしまいます。
1 |
PHP Notice: Undefined variable: num in /xxx/yyy/sample.php on line 7 |
これに対し関数外で使用される変数がグローバル変数です。
グローバル変数を関数内で使用した場合
では、グローバル変数を関数内で使用した場合どうなるでしょうか?
以下の例のようにまず変数に値を入れ、関数内で変更してみます。
1 2 3 4 5 6 7 8 9 10 |
<?php $num = 5; function func(){ $num = 10; } func(); echo $num; // 5 ?> |
しかし、この場合、$numは5と表示されてしまいます。func内で$numに10を入れているように見えますが、この$numは関数内で使用されるローカル変数の$numとみなされてしまいます。
つまり、同じ名前であっても関数内の変数は別の変数として扱われます。
グローバル変数を関数内で利用する
ではグローバル変数を関数内で利用するにはどうしたらよいでしょうか?それには関数内で使用するグローバル変数をあらかじめ宣言しておく必要があります。
それには global という命令を使います。
1 2 3 4 |
function func() { global $num; $num = 10; } |
このようにglobalで$numを宣言しておくと、この変数はローカル変数では無くグローバル変数の$numである、ということになります。
この結果、以下のように実行すると、10と表示されます。
1 2 3 4 5 6 7 8 9 10 11 |
<?php $num = 5; function func() { global $num; $num = 10; } func(); echo $num; // 10 ?> |
グローバル変数はPHPではデフォルトでは関数外でのみ使用される変数となっており、関数内で使うためにはグローバルで使う変数を宣言しなくてはなりません。これは忘れやすいのでよく覚えておきましょう。