phpのglobalとは?定義することでファイル内のどこからでも呼び出せます

C言語やJavaにはグローバル変数がありますが、同じようにPHPにもグローバル変数があります。

通常のグローバル変数は「全てのスコープから参照できる変数」を指しますが、PHPのグローバル変数は意味が少し違います。

今回はPHPのグローバル変数についてと共に、グローバル変数を利用するために定義するglobalについてもご紹介します。

スコープとは特定の場所で定義した変数や関数が利用可能な範囲のこと

冒頭で「スコープ」という言葉を出しましたが、プログラムに触りなれている人でないとスコープの意味自体わからないですよね。

スコープとは特定の場所で定義した変数や関数が利用可能な範囲を指し示しているもののことです。

PHPを含め様々なプログラムで大体の場合は「{}」で示しています。

プログラムには原則「{}」などで区切ったスコープ内で定義した変数や関数は、その中でしか使えないようになっています。

ただしPHPの場合は引数やアロー演算子などを使って、スコープ内の変数や関数を呼び出すといったことも可能です。

他のプログラムでも似たような方法でスコープ内のものを呼び出すことは可能です。

基本的には定義した変数や関数がどこに属しているものかを区切っているものだと捉えておけば大丈夫です。

PHPのグローバル変数はグローバルじゃないとアクセス不可な変数

冒頭でも説明しましたが、グローバル変数はC言語やJavaなら「全てのスコープから参照できる変数」です。

これに対してPHPのグローバル変数は、グローバルでない場所からだと、そのままアクセスできない変数です。

例えば以下のようなプログラムを実行してみます。

fnuc();の実行でsampleが出力されるように見えます。

ですが、実際には以下のようにfunc()内のsampleは未定義だと示すエラーが表示されます。

グローバル変数として定義されているsampleは、そのままだと関数やクラス内ではアクセスできない変数ということです。

【PHP】グローバル変数(global)とは?ローカル変数との使い分け方

基本的に使ってるのがローカル変数

基本的にグローバル変数よりもローカル変数のほうがよく使われています。

関数・クラス内で変数を定義して、その中で使うかまたはそこから呼び出して使う方法があるため、ローカル変数で処理が足りてしまうことが多いです。

ただその分ローカル変数はスコープ内だけなのに対して、グローバル変数はプログラム全体で使える利点があります。

プログラム全体で統一して使う変数なら、グローバル変数のほうがいいです。

前項のプログラムをグローバル変数からローカル変数に書き換えると以下のようになります。

func()のスコープ内でローカル変数としてsampleを定義しているため、実行結果はエラーにならず「sample」と表示されます。

【PHP】ローカル変数とは?グローバル変数との違いや注意点は?

グローバル変数を関数内で使うには予めglobalで宣言しておく

グローバル変数は定義されていない関数・クラス内で普通に呼び出そうとしても呼び出せませんが、呼び出す方法があります。

それがglobalを使って関数・クラス内で宣言しておくことです。

以下のプログラムのようにglobalを使ってスコープ内で宣言することで、グローバル変数にアクセスすることができます。

このように記述して実行すれば、エラーにならず実行されて「グローバルな変数」と出力されます。

ちなみにグローバル変数を複数定義して、関数・クラス内で複数呼び出す場合は「,」で区切って定義することができます。

以下のようにglobalの後に,で区切って変数を定義すればよいだけです。

こちらも実行すると「グローバルな変数」と表示されます。

グローバル変数が複数あっても「,」使って対応することができます。

引数としてグローバル変数を渡してアクセスすることも可能

先程は関数・クラス内でglobalを使って定義することで、グローバル変数にアクセスできる方法を紹介しました。

グローバル変数にアクセスできる方法はそれだけでなく、実はもう一つ引数としてグローバル変数を渡す方法もあります。

以下のプログラムみたいに引数にグローバル変数を入れてしまうことで、そのままスコープ内でアクセスが可能です。

このやり方でも実行すればglobalで宣言したときと同じように「グローバルな変数」と出力されます。

作った関数・クラスを実行する際にも引数として入れる必要がある点に注意が必要です。

グローバル変数と似たような動きをするstatic変数

PHPにはグローバル変数と似たような動きができる変数としてstatic変数があります。

new演算子を使ってインスタンスを生成しなくてもクラスのメンバにアクセスできる変数です。

globalと「static」で宣言すれば作れるのですが、staticの前にpublicまたはprivateでアクセス権の指定が可能です。

つまりstaticの前に「public」とつければグローバル変数、「private」とつければローカル変数の動きをさせれます。

以下のようにstaticの前にpublicまたはprivateと記載すればよいだけです。

public staticで宣言するだけで、グローバル変数と似たような変数を作ることができます。

includeを使えば別ファイルでグローバル変数を呼び出すことが可能

グローバル変数はファイル全体でアクセス可能な変数なので、変数自体をファイル単位でそれぞれ定義することになります。

ファイル単位で定義したグローバル変数を持っていることになるので、実はincludeで対象のファイルを呼び出せば、そのファイルのグローバル変数を使うことができます。

ただしその場合も以下のようにglobalを使って変数を定義する必要があります。

includeを使って呼び出し、その中できちんとグローバル変数でsampleが定義され値が代入されていれば、実行結果にはsampleの中身が表示されます。

ただincludeを使って呼び出すだけでなく、きちんとglobalを使って定義しないといけない点に注意が必要です。

複数のファイルに渡って同じ内容のグローバル変数を使いなどの時に使えて便利です。

【PHP入門】よくわかるinclude(インクルード)の使い方!

まとめ

今回はC言語やJavaとは少し違うPHPのグローバル変数についてご紹介しました。

グローバル変数は基本関数・クラス内では「global」で定義するか引数で渡す必要があり、そうではない場合はグローバルな場所以外からはアクセスできません。

似たような変数のstaticがあることや、別ファイルではincludeで定義すれば呼び出せることも併せて覚えておいてくださいね。