※この記事は「2021年5月2日」に更新しました。
前回は、PHP のセキュリティについて紹介しました。
今回は、名前空間についてです。
本来なら、もう少し前に紹介しておくべきだったのかもしれませんが、アップするタイミングを逃してしまったので、今から説明していきます。
名前空間とは
名前空間とは、自分が作ったクラスなどがバッティングしないようにするためのものです。
たくさんクラスを定義していくと名前が思わぬところでバッティングすることがあります。
本来なら名前を長くしてバッティングしないようにするところですが、この方法だとコードが読みづらくなり、あまり好ましくありません。
名前空間があれば、クラス名を短くすることができるのでコードが読みやすくなります。
特に開発の規模が大きくなったり、他の人がつくったライブラリを利用するときに、割と見かけるので理解していきましょう。
namespace
名前空間を定義するには、namaespace を使います。
namespace 名前空間名
これだけだとわかりにくいので、実際にどんな感じで定義するか説明します。
名前空間は階層構造に書くことができる
Laravel(ララベル)のコントローラを作成したときにスクリプトファイルに下記のような定義がされていたのを覚えているでしょうか。
namespace App\Http\Controllers;
このように、名前空間は階層構造に書くことができます。
ちなみに、このクラス(PHP のスクリプトファイル)は、App\Http\Controllers の直下に存在します。
構文規則ではないのですが、フォルダ構造と名前空間の階層は同じにしておくことで管理がしやすくなります。
Laravel のコントローラについては、下記記事をご参照下さい。
名前空間はファイルの先頭で定義する
名前空間は、ファイルの先頭で定義する必要があります。
<?php 以外の何ものも存在してはいけません。
名前表記について
名前空間を利用する場合、名前表記は非修飾名、修飾名、完全修飾名に分類できます。
非修飾名
非修飾名は、名前空間を含まない名前のことです。
User
というような名前のことです。
修飾名
修飾名は名前空間に階層区切り文字を含んだ名前のことです。
Dir\Test
というような名前のことです。
完全修飾名
完全修飾名は、\ で始まる修飾名のことです。
\Pasota\Dir\Test
というような名前のことです。
use
名前空間をインポートするには、use を使います。
階層的に管理していくと名前が長くなっていくことも珍しくありません。
use Dir\Test as Test
あくまで例ですが、このような感じで書くことでシンプルになります。
require "User.class.php" use use Dir\Test as Test $pasota = new Test\User("Pasota"); $pasota->msg();
User.class.php は、Userクラスが定義されているファイルです。
細かい中身はさておき、Pasota という引数を渡してインスタンス化し、$pasota という変数に格納しています。
その後、msgメソッドを呼び出しています。
ちなみに as Test の部分がない場合は、new Dir\Test\User(“Pasota”) とすれば良いのです。
最後に
いかがでしょうか。
開発の規模が大きくないとあまりありがたみを実感しにくいかもしれません。
冒頭でも紹介した通り、人のライブラリを使うときに割とでてくることがあります。
本来、オブジェクト指向の記事で書くことだったのかもしれませんが、かなり長くなりそうだったので別記事で紹介しました。