昔PHPでは他のファイルを読み込む時にはrequire_onceなどとすることが一般的でした。
で、クラスが増えてくるとこれがとんでもない量になってくるんですよね・・・
その時の代替案として_autoload関数やspl_autoload_registerなんかを昔使っていました。
これらを使っていると、クラスがインスタンス化されるときに未定義のクラスを呼ばれた場合、自動で特定の関数を呼びだし、require_onceをここでまとめておくと、一括で呼び出せる・・という仕組みです。
phpの__autoload関数とかspl_autoload_registerについて理解したのでまとめておく
で、フレームワークを使っていると上記のような仕組みを自前で作ることがなかったんで、あまり気づかなかったんですが、composer.jsonで下記のように書いておくと、実はそれすら必要ありません。
1 2 3 4 5 6 7 |
{ "autoload": { "psr-4": { "App\\": "src/" } } } |
上記のように書いておき、 composer dump-autoload を実行します。
そうすると
vendor\autoload.phpを読み込むことで
例えば
src\Model\User.phpというクラスは、
use App\Model\Userと記述しておけばspl_autoload_registerなどの関数は不要です。
これは
composer dump-autoloadのコマンドを打つことで
vendor配下にクラスをマッピングしたプログラムができるからです。
上記の場合だと具体的には vendor/composer/autoload_psr4.phpというファイルに記述されています。
いやーcomposer.jsonとってもわからんこと、知らないで使っていることがいまだにありますね・・・