「グローバル変数の扱い方について知りたい」
「ローカル変数とは何が違うの?」
今回の記事では、PHPのグローバル変数についてご紹介していきます。
PHPを含め、多くのプログラミング言語には「スコープ」と呼ばれる概念があります。まずはこのスコープについて解説し、「グローバル変数」「ローカル変数」について解説していきますので、ぜひ参考にしてみてくださいね!
目次
グローバル変数とは何か
グローバル変数とは全てのスコープから参照することのできる変数です。言い換えると、ファイル全体で参照できる変数ということになります。
ファイル内で定義されたグローバル変数を、そのファイル内のどの関数からでも呼び出して使用することが可能となるのです。
例として下記のコードをご紹介します。
1 2 3 4 5 6 7 8 |
<?php $グローバル変数名 = グローバル変数の値; function 関数名() { global $グローバル変数名; } 関数名(); ?> |
このようにグローバル変数を、ファイル全体のどの関数からでも呼び出して使用することが可能です。
JavaやC言語などのプログラミング言語も、グローバル変数の定義は同じとなります。
スコープと呼ばれる概念について
グローバル変数は全てのスコープから参照できる変数と述べましたが、「PHP」はC言語やJavaなどのプログラミング言語と比べて、グローバル変数の扱い方が少しだけ異なります。
まずスコープと呼ばれる概念についてですが、スコープとは ”定義した変数や関数を扱うことができる範囲” のことを指します。日本語で表現すると ”有効な範囲” となります。
では下記のように、実際のコードを使って解説をしていきます。
1 2 3 4 5 6 7 8 9 10 |
<?php $hoge = 1; function foo() { echo $hoge; } foo(); ?> |
このコードでは、変数「hoge」を定義して1を代入しています。
次の操作として、関数「foo」を定義して変数「hoge」を表示させます。そのまま1が表示されると思われますが、しかしこれでは表示されることはありません。
グローバル変数を実行するためには?
PHPはグローバル変数の扱い方が少し異なると、先ほど述べましたね。ではPHPでグローバル変数を実行するためには、そのような処理をしたらいいのでしょうか。
下記のコードを例にしてみましょう。
1 2 3 4 5 6 7 8 9 |
<?php $hoge = "グローバル変数"; function foo() { global $hoge; echo $hoge; } foo(); ?> |
このように記述することで、3行目で定義したグローバル変数の値を返すことができます。
例えば2行目に、関数「hoge」に1を代入したら「1」が、2を代入したら「2」が表示されることになります。
グローバル変数を実行できるようにした際に行った変更点は、たった1行を追加するだけです。echo で表示をさせる前に、global という命令文を使用しています。
1 |
global $hoge; |
グローバル変数とローカル変数の違い
先ほどのグローバル変数のコードを、もう一度みてみましょう。
1 2 3 4 5 6 7 8 |
<?php $グローバル変数名 = グローバル変数の値; function 関数名() { global $グローバル変数名; } 関数名(); ?> |
一方でローカル変数を使用する場合は、下記のコードのように記述します。
1 2 3 4 5 6 7 |
<?php function 関数名(); { $ローカル変数名 = ローカル変数の値; } 関数名(); ?> |
グローバル変数とは違い、ローカル変数は関数を呼び出せる範囲が決まっています。その範囲内でしか呼び出すことができません。
関数の中で変数定義した場合は、原則としてその関数内でしか変数を使うことはできません。では例として、下記のコードを参考にしてみましょう。
1 2 3 4 5 6 7 8 9 10 11 |
<?php function foo() { $hoge = 10; } foo(); echo $hoge; ?> |
このコードを実行した場合関数「foo」を呼び出し、変数「hoge」の10を表示できるかと思いますが、エラーが出てしまい実行することができません。
なぜかというと、関数「foo」の中で使用している変数「hoge」と、関数外の変数である「hoge」は全く別のものとして扱われているからなのです。
関数「foo」の中で使用されている変数「hoge」は、ローカル変数と呼ばれます。
スーバーグローバル変数ついて
$GLOBALS というスーパーグローバル変数についてはご存知でしょうか。
これはPHPの定義済み変数のことで、スクリプト全体を通して全てのスコープで使用可能な変数のことです。
これまでにご紹介した「グローバル変数」もその中の1つとなります。
PHPの定義済み変数は他にもあり、以下のものが該当します。
$GLOBALS(グローバル変数) | ・グローバルスコープで使用可能なすべての変数への参照ができる ・連想配列として使用する |
$_SERVER(サーバー変数) | ・サーバ情報および実行時の環境情報 ・連想配列として使用する |
$_GET(ゲット変数) | ・HTTP GET 変数 ・連想配列として使用 |
$_POST(ポスト変数) | ・HTTP POST 変数 ・連想配列として使用 |
$_FILES(ファイル変数) | ・HTTP ファイルアップロード変数 ・連想配列として使用 |
$_REQUEST(リクエスト変数) | ・HTTP リクエスト変数 ・連想配列として使用 |
$_SESSION(セッション変数) | ・セッション変数 ・連想配列として使用 |
$_COOKIE(クッキー変数) | ・HTTP クッキー ・連想配列として使用 |
$_ENV(環境変数) | ・環境変数 ・連想配列として使用 |
通常の場合、変数は有効範囲が決まっています。ローカル変数がその例ですね。
しかしPHPの定義済み変数は、プログラムのどこからでも使用することができます。
そのため定義済み変数、つまりスーパーグローバル変数はとても便利なものと言えるでしょう。
スーパーグローバル変数は連想配列で使用
スーパーグローバル変数は、連想配列で使用します。
PHPの連想配列の基本については、PHPの連想配列(Key-Value Array)の基礎をおさえようにて解説をしています。
この基本知識は覚えておきましょう。
グローバル変数と似ている「static変数」とは
PHPのグローバル変数とローカル変数については理解できたでしょうか。
ここでは、グローバル変数と似たような動きをする「static変数」をご紹介していきます。
static変数は静的変数といい、使用する場合は変数の先頭に「static」を記述します。
例えば以下のコードのように記述します。
1 |
static $hoge = 1; |
通常外部から参照するには、クラスのインスタンスを生成して関数や変数にアクセスする必要があります。しかしstatic変数を使用することで、グローバル変数のように外部からでも参照できるようになります。
まとめ
いかがでしたか?
この記事では、PHPのグローバル変数についてご紹介をしました。また、ローカル変数との違いについても解説しましたね。
PHPにはスーパーグローバル変数があり、とても便利にプログラムを書くことができます。しっかりと学習して、開発できる幅を増やしていきましょう!