PHPでは、ソースコード内の決められた範囲でしか使えない変数のことを、ローカル変数といいます。一方、ほとんど意識することなく使える変数を、グローバル変数といいます。
そこで今回は、PHPのローカル変数とグローバル変数についての解説と、使い方の違いについて紹介していきます。PHPプログラミング初心者の方は、特に参考になると思いますよ。
目次
PHPのローカル変数とは
PHPのローカル変数とは、決められた範囲内でしか使えない変数のことです。例えば、関数内で定義された変数は、その関数内の処理以外では基本的には使えません。
ローカル変数内の値を他の関数でも使用したい場合には、関数の戻り値にするなどの対応が必要です。
一方、使える範囲をほとんど気にする必要がなく、ファイル全体で有効な変数もあります。これをグローバル変数といいます。
PHPのローカル変数とグローバル変数の違い
プログラミング初心者の人であれば、PHPで利用されるローカル変数とグローバル変数の違いについて、いまいち理解できていない人も多いでしょう。
そこで、実際にサンプルコードを使って、各変数の違いを比較してみましょう。
ローカル変数の使い方
ローカル変数は、限られた範囲内でのみ使用できる変数なので、変数の値を使う場合には、使用可能な範囲内で利用する必要があります。
ローカル変数の使い方は次の通りです。
1 2 3 4 5 6 7 8 |
<?php function foo() { $hoge = "ローカル変数"; echo "$hoge<br />"; } foo(); ?> |
上記のコードでは、変数hogeはfoo関数内で定義されたローカル変数です。そのため、変数hogeの値を使いたい場合には、foo関数内で使用する必要あります。
グローバル変数の使い方
グローバル変数は、ファイル全体で有効な変数なので、関数内で定義されていなくても、グローバル宣言をすることで、変数内の値を使用することができます。
グローバル変数の使い方は次の通りです。
1 2 3 4 5 6 7 8 9 10 |
<?php $hoge = "グローバル変数"; function foo() { global $hoge; echo "$hoge<br />"; } foo(); ?> |
上記のコードでは、変数hogeはグローバル変数です。変数hogeは、関数foo内で定義されていませんが、グローバル宣言をすることで、変数hogeに定義された値を使用することができます。
ローカル変数とグローバル変数の動作の違い
ローカル変数とグローバル変数の動作の違いの参考として、ローカル変数とグローバル変数の変数名を同じにして、各状況における動作を確認してみましょう。
まずは、関数内でグローバル変数名と同じローカル変数を定義した場合の動作について確認してみます。
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php $hoge = "グローバル変数"; function foo() { $hoge = "ローカル変数"; echo "関数内:$hoge<br />"; } foo(); echo "関数外:$hoge<br />"; ?> |
関数外:グローバル変数
ローカル変数の値はfoo関数内でのみ利用可能なので、foo関数の外ではグローバル変数の値が出力されました。
次に、関数内でローカル変数を定義後、同じ変数名のグローバル変数を宣言してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php $hoge = "グローバル変数"; function foo() { $hoge = "ローカル変数"; echo "関数内:$hoge<br />"; global $hoge; echo "関数内:$hoge<br />"; } foo(); echo "関数外:$hoge<br />"; ?> |
関数内:グローバル変数
関数外:グローバル変数
上記の通り、関数foo内で定義されたローカル変数hogeですが、同じ名前のグローバル変数を宣言することで、上書きされました。
最後に、関数内でグローバル宣言した後に、グローバル変数の値を変更した場合、関数の外ではどのように動作するのか確認してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php $hoge = "グローバル変数"; function foo() { global $hoge; echo "関数内:$hoge<br />"; $hoge = "ローカル変数"; echo "関数内:$hoge<br />"; } foo(); echo "関数外:$hoge<br />"; ?> |
関数内:ローカル変数
関数外:ローカル変数
foo関数内でグローバル宣言後、変数hogeの値を変更し、foo関数の外でグローバル変数の値を出力してみると、foo関数内で変更した値が出力されました。これは、グローバル宣言後の変数hogeの操作は、グローバル変数の値を操作したことになるためです。
このように、操作する変数がローカル変数かグローバル変数かをしっかりと把握していないと、システムエラーに繋がる可能性があります。
変数を定義する際には、変数名が同じにならないようにルール付けをするなどの工夫をするようにしましょう。
PHPにおける変数のスコープとは
PHPでは、定義した変数や関数の使える範囲のことをスコープといいます。つまり、ローカル変数のスコープは、変数を定義した関数内で、グローバル変数のスコープは、ファイル全体ということになります。
プログラミング初心者の人の中には、いちいち定義するのは面倒だから、全てグローバル変数に統一してしまおうと思う人もいるかもしれません。しかし、スコープの範囲を広げることは、プログラムの処理を追いにくくする原因になります。また、最終的にはコードも書きづらくなります。
スコープを意識して変数を定義することは、システムの保守性を向上させる要因の1つです。PHPのプログラミングでは、スコープを意識するようにしましょう。
なお、ローカル変数とグローバル変数の他にも、全てのスコープで使用できる「スーパーグローバル」と呼ばれる組み込みの変数も存在します。
PHPのstatic変数とは
グローバル変数と似たような働きをする変数にstatic変数があります。静的変数とも呼ばれています。
static(静的)とは、クラスのインスタンスを生成せずに、クラスメンバにアクセス可能なメンバのことです。
static変数は、変数の先頭にstaticを付けて定義します。
1 |
static $変数名 = 値; |
他のPHPファイルに定義された変数を使う方法
グローバル変数のスコープは、同一ファイル内です。つまり、別のファイルにあるグローバル変数は使えないということです。
しかし、別ファイルを読み込むことで、別ファイルで定義されたグローバル変数も使えるようになります。
別ファイルの読み込みには、include文を記述する必要があります。書き方は次の通りです。
1 2 3 |
<?php $hoge = sample; ?> |
1 2 3 4 5 6 |
<?php include 'sample.php'; global $hoge; echo $hoge; ?> |
上記コードでは、「test.php」内で、別ファイルである「sample.php」をインクルードしました。これにより、「sample.php」内で定義されている変数hogeの操作が可能になりました。
まとめ
PHPには、ローカル変数とグローバル変数があります。各変数は、変数を利用できる有効範囲に明確な違いがあります。その範囲のことをスコープといいます。
変数を定義する際には、変数の使用目的に合わせてローカル変数として定義するのか、グローバル変数として定義するのかを選択しましょう。
スコープを意識せずに定義された変数は、システムの保守性を大きく損なう原因になります。これからプログラミングを始めたいと考えている人は、ローカル変数とグローバル変数の違いを、しっかりと理解するようにしましょう。