たけるのプログラミング

作ったものとか、気ままにアップします。

【PHP】オートロードとクラスインポート

PHPのオートロード(autoload) - Qiita
【PHP】Composerを使用してクラスのオートロードを行う | Points & Lines
【PHP超入門】名前空間(namespace・use)について - Qiita



laravel使ってると何でuseだけでクラスが使えるようになるの?

結論autoload(オートロード)とクラスインポートの組み合わせ。

フルスクラッチで挙動について確認してみる。

今回のディレクトリの構成。

f:id:takeru232423:20220309132929p:plain

オートロードを使うために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のコードの見方が変わるかも。