初級的な内容だが、phpの変数のスコープについてまとめてみた。要はローカル変数とグローバル変数の違いだ。
ローカル変数とは
"local":「局所的な」変数という意味で文字通り、特定の区間において有効な変数だ。
phpにおける局所的な区間とは"関数"だ。
そう、ローカル変数とは簡単に言うと"関数内で宣言された変数"になる。
ローカル変数の特徴とは、「外部からその変数を利用できない」ことだ。以下の例を見て欲しい
1 2 3 4 5 6 7 8 9 10 11 |
<?php $num = 10; echo $num; //10と表示される } sample(); echo $num; //関数外では$numという変数にアクセスできないのでエラーになる ?> |
関数内で定義された$numは関数外からアクセスすると、「そんな変数定義されていないよ」と言われる。
要するに、外界から隔絶された変数といえる。
グローバル変数
"global":「包括的な」変数。察しはつくだろうが、どこからでもアクセスできる変数だ。
つまり、関数の外だろうが中だろうが値を取り出したり、内容を書き換えたりできる。
しかし、関数内でグローバル変数を使う場合にはひと工夫必要だ。
下の例を見て欲しい、
1 2 3 4 5 6 7 8 9 10 11 |
<?php $num = 100; function sample(){ global $num; //globalをつけることで、$numはグローバルだよと宣言する echo $num; //100と出力される。 } function _sample(){ echo $num; //$numなんて定義されていないよ、知らないよと言われてエラーを返す。 } sample(); _sample(); |
関数内でグローバル変数にアクセスしたい場合は、"global"をつけて宣言しなおしてやる。
要は「自分はglobalから来ましたよ」と言う意味で関数内で自由に動けるためのパスポートみたいなもんだ。
それもなしに_sampleないで、ただ"$num" だけなら「 $num? 誰それ知らんわ」ってなっちゃう。
グローバル変数の利用について
グローバル変数はどこからでも利用できるから、扱い易いように見えるが。
プログラムのコードが何百行になった時に、グローバル変数を色んな所で使ってしまうと。
後から、そのコードを見直すときに、絶対後悔するだろう。
そのために、多くのプログラマーはグローバル変数を宣言するとき、決まって大文字を使う習わしがある。
大体こんな感じだ、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php $TEXT_PATH = './sample.txt'; //グローバル変数を宣言:大文字をアンダーバー「_」でつなぐ function readText(){ global $TEXT_PATH; //グローバル変数であると、宣言。 $file = fopen($TEXT_PATH, 'r'); while(($buffer = fgets($file)) !== false) { echo $buffer; echo "\n"; } fclose($file); } readText(); |
大体、プログラム全体で扱う設定変数について使われる印象が強いな。
プログラムを書いていくと、この変数はどこまで使えるかということがわかっていた方が、他の人が見ても後で自分が見ても幸せになる。
要は何が言いたいかというと、あまりグローバル変数を使わないことだ。