Laravelのファイルの先頭に出てくるnamespaceとuseですが、
オートローダーを採用しているLaravelには必須の記述となるようです。
別段、詳しく知る必要もなく、恥をかく事もない程度に理解できればOK
というレベルでまとめてみる。
オートローダ―についてはこちらPSR-4
また、この話は
・CoC(convention over configuration)設定より規約
開発者の決定すべきことを減少させ、単純にするが柔軟性は失わせない
ソフトウェア設計パラダイム。
⇒変数名、関数名、クラス名などで悩まずに、Laravelの定めた規約に従えば、
先人の知識を踏襲したコードが完成する。
・DRY(Don’t Repeat Yourself)原則
同じ処理や情報を複数回記述しないようにする設計原則のこと。
⇒環境変数などは共通ファイルで管理して、記述するコードは、Laravelが提供する
ライブラリを踏襲して作ればよい。
に深く根ずく考えです。
フレームワークを利用するならば、知っておくべき知識ですが、知らず知らずに恩恵を
受ける事になります。まあ、フレームワークとは、
”ソフト開発に必要な、便利な方法を集めたので使って行きましょう!”
なので、素直に従いましょう。
namespace
書き方
namespace 名前空間名;
例えば、下記のファイルで定義されたnamespaceは、
\vendor\laravel\framework\src\Illuminate\Support\Facades\Route.php
namespace Illuminate\Support\Facades;
です。
1つのファイルには1つの名前空間が推奨されてますので、ファイルの先頭に
1つだけ記載されます。
なので、このファイル内のクラスや関数は名前空間名Illuminate\Support\Facadesを
指定する事で、他のファイルで使用する事が可能となっています。
名前空間はカプセル化を実現させる仕様なので、他の開発者同士が同じ名前で
クラスや関数を作っても、この名前で識別して使用を可能とします。
また、パスを意識した名前を付ければ、機械的にユニークな名前が付けられるので、
多くの場合ファイルが置かれた場所までのパスがnamespaceの名前空間名になります。
次に、このファイル内で定義されているクラスRouteを呼びだします。
use
クラスRouteを呼び出すファイル
\routes\web.php
では
use Illuminate\Support\Facades\Route;
と記述されている。
つまり、
名前空間 Illuminate\Support\FacadesのクラスRouteを呼び出し、
これ以降は名前空間名を省略してクラスRouteを使用できます。
と言う事になります。
名前空間のクラスの呼出し記述は
”名前空間名¥クラス名”(windowsは¥、Linuxは/)
なので、
Illuminate\Support\Facades¥Routeでは
Illuminate\Support\Facades:名前空間名
Route:クラス名
の記述となり、クラスRouteが呼び出されます。
この状態でuseを適応するので、use宣言以降は、修飾子である名前空間の記述
を無くしてクラス名だけで、名前空間にあるクラスRouteを使用できる事となります。
Route::get('/', function () {
return view('welcome');
});
上記は、名前空間Illuminate\Support\FacadesにあるクラスRouteの
静的関数getを使用する記述となります。
まとめ
namespaceは本来はただの名前を記述するのですが、パスの記述をして煩わしいと思われます。
ただ、
・一意に名前が決まって、名前を考える必要がない
・ファイルの置き場が解る
の理由で、パスのような記述を行っている。
多くの人で、コードを記述する場合、ほぼ変数名や関数名がバッティングします。
なので、ユニークな名前を付けるのに、苦労しますので、namespaceは必須です。
namespaceとセットでuseを使う理由として、
- 名前空間の全て、または一部をインポート
- クラスをインポート
- 関数をインポート
- 定数をインポート
を可能としている事がその理由です。
namespaceで名前として使ったパスをコピーするだけで、
必要なクラスをインポートできるので、とても便利な記述と言えます。
ましてやオートローダ―に登録されていれば、
インスタンスを作る必要もありません。


