PHP名前空間とは?
この記事の動画版はこちら(画像クリックでYoutubeに飛びます)
名前空間とは?
結論から先に言うと
PHPの「名前空間」というのは、プログラムの中で、同じ関数名やクラス名を使っても競合しないように「区分け」する仕組みです。
PHPでは、プログラムの中で同じ名前の関数やクラスを定義するとエラーになってしまいます。
ソースコードの少ない小規模なアプリを1人で開発している分には、それほど問題は起きないのですが、複数人で開発したり、ソースコードの規模が大きくなる場合は、他の誰かが付けた関数名やクラス名とたまたま被ってしまうことがあるかもしれません。
また、外部のライブラリなどを使用する場合も、そのライブラリの中で定義されている関数名やクラス名と被ってしまうとエラーが発生してしまいます。
名前が被らないようにするには、誰も付けないような長い名前にする必要がありますが、それだとソースコードが読みづらくなってしまいます。
そんな時に便利なのが「名前空間」という仕組みです。
名前空間を指定すると、それぞれは独立した空間となり、その中では自由に名前を付けることが可能になります。
別の空間に同じ名前の関数やクラスがあったとしても、競合することはありません。
名前空間の作り方
PHPでは、名前空間は「namespace」というキーワードを使って指定します。
このように書くと「GroupA」という名前空間を指定したことになります。
この指定の後に続けて書いた関数やクラスは、GroupAの名前空間に属する形になります。
send()というありふれた名前の関数は、他の場所で使われているかもしれませんが、GroupAという名前空間の中に定義しているのでエラーにはなりません。
なお、名前空間はこのように1つだけでなく、階層を区切って細かく指定することもできます。
これを「サブ名前空間」といいます。
注意点として、namespaceの行よりも前にPHPの他の命令(declareは除く)や、HTMLタグなどを書くとエラーになります。
必ず冒頭で指定するようにしましょう。
これで、名前空間の指定はOKです。
関数以外にも、クラス、インターフェース、定数(constで定義した場合のみ)を名前空間に含めることができます。
名前空間の使い方
次に、先ほど作った名前空間の中にある関数を呼び出す際はこのように書きます。
「名前空間名\関数名;」と指定することで、その名前空間の中にある関数を呼び出すことができます。
サブ名前空間を指定している場合も同様です。
useとは?
サブ名前空間を使って、名前空間の指定が長くなってしまう場合、この指定を毎回書くのは面倒ですよね。
そんな時は「use」キーワードを使うことで、名前空間のエイリアスを作ることができます。
このように書くと「GroupA\Common\Mail」を「Mail」というエイリアス名で定義することができ
関数を呼び出す際は、「Mail\send();」と書くだけで呼び出せます。
また、asのエイリアス名を省略すると、末尾の名前がエイリアス名として使用されます。
つまり、この2つは同じ意味になります。
また、このように指定すると、クラス/関数/定数を直接指定することもできます。
例えば、先ほどのsend()関数の場合は、このように指定すると、名前空間の指定なしで呼び出せるようになります。
まとめ
・名前空間とは、プログラムの中で同じ関数名やクラス名を使っても競合しないように「区分け」する仕組み
・namespaceキーワードを使って定義する
・サブ名前空間を使って、細かい階層で指定することもできる
・useキーワードを使うことでエイリアスを定義し、簡易指定することもできる
今回は、分かりやすいように基本的な部分の解説のみを行いましたが、他にも、複数の名前空間を定義したり、逆に1つの名前空間を複数のPHPファイルに定義したり、名前空間の指定にも色々な方法がありますので、興味があればこれを機に是非学習してみてくださいね。