Laravelのファイルの先頭に出てくるnamespaceとuseですが、
オートローダーを採用しているLaravelには必須の記述となるようです。
別段、詳しく知る必要もなく、恥をかく事もない程度に理解できればOK
というレベルでまとめてみる。
オートローダ―についてはこちらPSR-4
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は本来はただの名前を記述するのだが、パスの記述をして紛らわしい。
・一意に名前が決まって、名前を考える必要がない
・ファイルの置き場が解る
の理由で、パスのような記述を行っている。
useは名前空間名が長いので、エイリアスとしてクラス名を使い、記述の簡略化を
行っている。
ざっくり言うとこんな感じ。
外部のファイルで使えるようにするnamespaceと、それを使って、ファイル内で
外部で定義されたクラスを短い名前で使えるようにするuseと言うところです。
ちなみに、”パスを辿ってもファイルが有りません”や”パス自体が有りません”と
聞かれたら、オートローダ―を読みましょう。