【PHP講座】名前空間とは

名前空間とは

前回は、PHP のセキュリティについて紹介しました。

【PHP講座】セキュリティについて

2019.07.01

今回は、名前空間についてです。

本来なら、もう少し前に紹介しておくべきだったのかもしれませんが、アップするタイミングを逃してしまったので、今から説明していきます。



名前空間とは

名前空間とは、自分が作ったクラスなどがバッティングしないようにするためのものです。

たくさんクラスを定義していくと名前が思わぬところでバッティングすることがあります。

本来なら名前を長くしてバッティングしないようにするところですが、この方法だとコードが読みづらくなり、あまり好ましくありません。

名前空間があれば、クラス名を短くすることができるのでコードが読みやすくなります。

特に開発の規模が大きくなったり、他の人がつくったライブラリを利用するときに、割と見かけるので理解していきましょう。

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”) とすれば良いのです。

最後に

いかがでしょうか。

開発の規模が大きくないとあまりありがたみを実感しにくいかもしれませんが、冒頭でも紹介した通り人のライブラリを使うときに割とでてくることがあります。

本来、オブジェクト指向の記事で書くことだったのかもしれませんが、かなり長くなりそうだったので別記事で紹介しました。