PHPの変数のスコープについてサンプルコード付き解説!

PHPの変数のスコープについてサンプルコード付きで解説します。グローバルスコープやローカルスコープについての解説とglobalキーワードの使い方まで初心者向けにご紹介します。

コンテンツ [表示]

  1. 1PHPの変数のスコープとは?
  2. 2グローバルスコープとローカルスコープ
  3. 2.1グローバルスコープ
  4. 2.2ローカルスコープ
  5. 2.3具体例
  6. 3【非推奨】グローバル宣言

PHPの変数のスコープとは?

PHPでは変数を定義することで、数値や文字列などの値を一時的に格納することが出来ます。

変数

一方でこの定義した変数は「どこでも利用できるか?」というとそうではありません。

実際には変数には有効範囲(スコープという)が決まっており、その有効範囲の中でしか使うことは出来ません

今回はこのPHPのスコープについてサンプルコード付きで解説します。

グローバルスコープとローカルスコープ

PHPではグローバルスコープとローカルスコープの2種類のスコープがあります。それぞれ紹介していきます。

グローバルスコープ

グローバルスコープは、PHPのプログラム全体から参照できる有効範囲の事です。

グローバルスコープの中で定義された変数をグローバル変数と言います。

ローカルスコープ

一方でローカルスコープは、基本的には{}で囲まれた関数やクラスのメソッド内の有効範囲の事です。

このローカルスコープの中で定義された変数をローカル変数と言います。

ちなみにローカルスコープ内部で定義された変数には、その外側からはアクセスできません。

具体例

文章だけだと分かりづらいので1つサンプルコードで見てみましょう。

上記のサンプルコードでは$nameという変数がmy_pet()という自作関数の外側と内側の両方で登場しています。

最後出力する際には、それぞれの変数の中身が出力されています。

ここで上記のプログラムでスコープを表すと下記のようになります。

グローバルスコープとローカルスコープ

順番に見ていきましょう。

ポチ

まずグローバルスコープで$name = "ポチ";の変数が定義されています。この変数はグローバルスコープで定義されているので、グローバル変数です。

コロ

次に関数内部のローカルスコープで$name = "コロ";が定義されています。ローカルスコープで定義されているので、ローカル変数です。

つまりポチとコロの値の変数はスコープが異なるので、別扱いのため、名前が同じでも問題ありません。

echo

echo文の箇所では、まず関数my_pet()が呼び出されています。

my_pet()ではローカル変数をechoしていますので、「コロ」が出力されます。

最後のechoはグローバルスコープで実行されていますので、グローバル変数の「ポチ」が出力されます。

【非推奨】グローバル宣言

これは非推奨の方法ですが、一応ご紹介しておきます。

先程の例ではスコープが異なるため$nameという同じ変数名でも問題ありませんでした。

一方でローカルスコープの中でグローバル変数を参照する方法があります。

下記のサンプルコードを見てみましょう。

上記の例では関数の中でglobal $name;という記述があります。globalというキーワードをつけて、変数名を指定することで、グローバル変数を参照することが出来ます。
(ちなみに別ファイルのグローバル変数もglobalキーワードで使うことが出来ます)

これを便利ととるか、危険ととるかはエンジニア次第ですが、非常に大きな問題です。

例えばglobalキーワードの後で$name = "コロ";と、変数の中身を上書きしていますので、グローバル変数が上書きされます。

その結果、echoでは両方とも「コロ」と出力されます。

このようにglobalキーワードを付けると、関数の中であろうと外であろうと変数を参照できますが、一方でどこで変数が上書きされるか把握することは出来ません。

そのため、変数の中身が分からず思わぬ不具合につながる可能性があります。極力globalキーワードは使わないほうが無難です。

GeekHive採用サイト

関連記事