【PHP講座】名前空間とは

名前空間とは

※この記事は「2021年5月2日」に更新しました。

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

セキュリティについて

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

2019年7月1日

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

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

ぱそた
SE、Web制作、販売を経験した管理人が解説します。



名前空間とは

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

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

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

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

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

namespace

名前空間を定義するには、namaespace を使います。

namespace 名前空間名

これだけだとわかりにくいので、実際にどんな感じで定義するか説明します。

名前空間は階層構造に書くことができる

Laravel(ララベル)のコントローラを作成したときにスクリプトファイルに下記のような定義がされていたのを覚えているでしょうか。

namespace App\Http\Controllers;

このように、名前空間は階層構造に書くことができます。

ちなみに、このクラス(PHP のスクリプトファイル)は、App\Http\Controllers の直下に存在します。

構文規則ではないのですが、フォルダ構造と名前空間の階層は同じにしておくことで管理がしやすくなります。

Laravel のコントローラについては、下記記事をご参照下さい。

コントローラ

【Laravel講座】コントローラ

2019年6月15日

名前空間はファイルの先頭で定義する

名前空間は、ファイルの先頭で定義する必要があります。

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

最後に

いかがでしょうか。

開発の規模が大きくないとあまりありがたみを実感しにくいかもしれません。

冒頭でも紹介した通り、人のライブラリを使うときに割とでてくることがあります。

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