ある日の公園
カバお「うわぁーーーーーん」
ウサこ「どうしたの、カバおくん」
カバお「PHPで新しくファイルを作って呼び出したいだけなのにうまくいかないんだァ」
ウサこ「それ、useとrequire_onceについてちゃんと理解できてる?」
カバお「あ、あ当たり前じゃないか、馬鹿にしないでよ、ウサこちゃん」
どうやらカバおくんは
useとrequire_onceについて正しくを理解していないようです。
useについて
ウサこ「カバおくんはuseについてどういう理解かしら?」
カバお「use宣言をすれば使いたいクラスが使えるようになるんだろォ」
ウサこ「その覚え方だと危険よ、正しくは名前空間などをインポートしたり、エイリアスを作成することができるイメージよ」
ウサこ「具体的にはuseを使うことで、具体的には下記のことが可能なの」
* 名前空間などのエイリアス(別名)を作成
* 名前空間の全て、または一部をインポート
* クラスをインポート
* 関数をインポート
* 定数をインポート
カバお「わわわ分かってるよ、そんなこと。ウサこちゃんはいちいちめんどくさいなァ」
require_onceについて
ウサこ「次はrequire_onceよ、カバおくん、これはどういう理解かしら?」
カバお「PHPではよく外部ファイルを読み込むのに使われているけど、Laravelでは使っていないよね」
カバお「Laravelはuseしているからきっと、使う必要がないんだよ」
外部ファイルを読み込む際に使うrequire_onceですが、laravelでは使われないため、
カバおくんは、useを使えばファイルも読み込めるという勘違いをしているようです。
Laravelはオートロード機能で読んでいる
ウサこ「カバおくん、Laravelでrequire_onceを使わないのは、オートロード機能の恩恵よ」
ウサこ「useで外部ファイルを読み込んでいるということではないの」
カバお「なななんだよオートロード機能って」
ウサこ「composer を使用してライブラリをインストールするとvendor/autoload.phpというファイルが生成されるわよね」
ウサこ「このファイルを一度だけrequireすることで、vendor配下のライブラリをすべて自動的にロードしてくれるの」
カバお「・・・・ほほう」
ウサこ「いちいちrequire_onceしていると骨が折れてしまうので、public/index.phpで事前にファイルを読み込んでいるのよ」
ウサこ「ほら、実際にpublic/index.phpを見て、しっかり記述があるわ」
require __DIR__.'/../vendor/autoload.php';
結論
ウサこ「まとめると、useは名前空間をインポートしているが、外部ファイルを読み込むにはrequire_onceをしなければならない」
ウサこ「Laravelでもautoloadでファイルの読み込みが行われているだけで、裏で外部ファイルを読み込んでいる」
ウサこ「こんな感じかしら」
カバお「いや、こここんなの最初から分かっていたよォ!」
ウサこ 。。。( ´ཀ`)ゲロ