【PHP】オートロードとクラスインポート
PHPのオートロード(autoload) - Qiita
【PHP】Composerを使用してクラスのオートロードを行う | Points & Lines
【PHP超入門】名前空間(namespace・use)について - Qiita
laravel使ってると何でuseだけでクラスが使えるようになるの?
結論autoload(オートロード)とクラスインポートの組み合わせ。
フルスクラッチで挙動について確認してみる。
今回のディレクトリの構成。
オートロードを使うためにcomposerを利用する。
composer.jsonにて
{ "autoload": { "psr-4": { "app\\": "./" } } }
と記述しcomposer dumpautoloadを実行する。上記コードは名前空間とするapp と 現在のディレクトリ(.)を紐付けている。
ディレクトリと同様の構造の名前空間を指定することでオートロード対象となる。
そのためクラスファイル(ファイル名とクラス名が同じファイル)に名前空間に上記で指定した「app」+ 「クラスファイルがあるまでのディレクトリ構造」
を指定する。なので以下のようになる。
test1.php
<?php namespace app\a; Class Test1 { function printa() { echo "a!!!"; } }
test2.php
<?php namespace app\b; class Test2{ function printb() { echo "b!!!"; } }
そして以下のように利用
try.php
<?php require_once("vendor/autoload.php"); use app\a\Test1; use app\b\Test2; (new Test1)->printa(); (new Test2)->printb();
それぞれのファイルをrequireしていないことがわかる。またuseを使いクラスをインポートし、コードが綺麗になる。
オートロードを勉強することでlaravelのコードの見方が変わるかも。