見出し画像

PHPのComposerを使ったオートロード(autoload)について

こんにちは、ありあけこういちです。
Composerはパッケージを管理する機能以外にautoloadという機能があり、require文を使用しなくてもファイル(クラス)を読み込むことができるため、その内容について調べました。

そもそもautoloadとは?

autoloadとは、名前空間を指定するだけで自動的にファイル(クラス)を自動で読み込む仕組みのことを指します。
メリットとしては、newしたいクラスが書かれたファイルを一々requireする必要性がなくなります。

composer.jsonの準備

composer.jsonファイルに以下の内容を作成します。

{
  "autoload": {
    "psr-4": {
      "{名前空間名}": "{名前空間に設定したいフォルダー名}/"
    }
  }
}

{名前空間名}のバリューを{名前空間に設定したいフォルダー名}としています。
仮に名前空間名が「App\」で、ディレクトリ「src\」と対応させたいなら下記のように記載します。

{
  "autoload": {
    "psr-4": {
      "App\\": "src/"
    }
  }
}

Composerの設定を反映する。

上記の記述が終わったらComposerで設定を反映させます。
まだvendorディレクトリが作成されておらず、新規にインストールする場合は下記コマンドを流してください。

$ composer install

すでにvendorディレクトリが作成されていて、既存のcomposer.jsonファイルでオートロード部分だけ追記・修正した場合は下記コマンドを流してください。

$ composer dump-autoload
Generating autoload files
Generated autoload files

が出たら完了です。
なお、vender/composer/autoload_psr4.phpにて、今回composer.jsonにて指定した名前空間との紐付けが分かります。

return array(
    ...
    'App\\' => array($baseDir . '/src'),
);

オートロード設定を基にファイルの呼び出しを行う

呼び出す側のファイルを作成し、vendor/autoload.phpのファイルのrequireを作成します。

<?php

require('vendor/autoload.php');

use App\Hoge;
...

ここでrequireのautoload.phpの行の記載がないまま実行すると、Fatal error: Uncaught Error: Class “App\Hoge” not found inエラーが表示されます。

php コマンドで問題なく実行できたら、以上でcomposerのオートロードに関して基本的な部分を完了です。

psr-0とpsr-4のルールについて

PSR とは PHP Standards Recommendations の略で、雑に訳すと「『PHP のスタンダード』のオススメ集」です。詳しく言うと、PHP の有志のコミュニティ「PHP-FIG」によって制定された規格や基準の推奨ガイドラインです。

https://qiita.com/KEINOS/items/2924ecde3e4bab0ead7e#fn-psr

psr-0は名前空間と実在のディレクトリ構成を同じにする仕様であり、2014年10月21日からもう非推奨になっている(githubリンク)らしく、autoloadに関しては基本的にpsr-4を採用すれば問題ないと思います。

psr-4は名前空間が実在のディレクトリ構成に依存しない仕様です。
psr-4についてより詳しく知りたい方はこちらの記事もぜひご参照ください。

参考記事



いいなと思ったら応援しよう!