2018/10/12
Laravelではcomposerによるオートロードの仕組みを利用しています。
オートロードの仕組みを利用すれば vendor/autoload.php を require するだけでほかのファイルのrequireは不要になります。
今回はより深くLaravelを理解するためにPHPのオートロードについて学びます。
オートロード機能
PHPによるオートロード機能とはファイルを自動で読み込む仕組みのことです。
この機能を使うことでPHPファイルの冒頭に require を書きまくることはなくなりました。
オートロード機能を使用するには composer を使います。
composer を使用してライブラリをインストールするとvendor/autoload.phpというファイルが生成されます。
このファイルがオートロードの実体ファイルです。
このファイルを一度だけrequireすることで、vendor配下のライブラリをすべて自動的にロードしてくれます。
また、プロジェクトの直下にあるcomposer.jsonでオートロードするファイルを追加することもできます。
Laravelでオートロードの仕組みを確認
laravelのエントリーポイント(処理の起点)である /public/index.php の中身を見てみます。
: require __DIR__.'../bootstrap/autoload.php'; :
次にrequireの参照元となっている bootstrap/autoload.php を開いてみます。
: require __DIR__.'../vendor/autoload.php'; :
上記のソースを見るとvendorディレクトリのautoload.phpが読み込まれているのがわかります。
オートロードの仕組み
オートロードするファイルの追加はcomposer.jsonで設定します。
"autoload": { "psr-4": { "foo\\": "bar/" } },
(記述方式)"名前空間プレフィクス\\" : "対応するベースディレクトリ"
psr-4とはクラスをオートローディングするための仕様です。
上記の記述では物理ディレクトリbar配下をfooから始まる名前空間として設定しています。
barディレクトリのクラスにアクセスする場合は、名前空間(foo)を指定します。
namespace foo; class Greeting(){ function hello(){ echo "Hello!"; } }
WEBルートでvendor/autoload.phpをrequireするだけでOKです。
require_once "vendor/autoload.php"; //オートロード $greeting = new foo\Greeting(); echo $greeting->hello();
オートロードを理解するためのチュートリアル
オートロード機能を使ってindex.phpからgion.phpのクラスをコールします。
│ composer.json
│ index.php(実行対象ファイル)
│
└─ area
└─ japan
└─ kyoto
gion.php(呼び出し先のファイル)
シナリオ
【1】composer.jsonの作成
【2】オートロードファイルの作成
【3】gion.php(呼び出し先のファイル)の作成
【4】index.php(実行対象ファイル)の作成
【5】動作確認
【1】composer.jsonの作成
composer.jsonのファイルを作成してオートロードの設定をします。
composer.jsonは手動で作成することもできますし、composer initコマンドで作成することもできます。
areaディレクトリをappという名前空間に指定します。
{ "autoload": { "psr-4": { "app\\": "area/" } } }
【2】オートロードファイルの作成
composer.jsonファイルを作成したらcomposer dump-autoloadコマンドを実行します。
cd xampp\htdocs\autoload composer dump-autoload
このコマンドでcomposer.jsonで設定した情報を元にファイル群を生成します。
またvendorディレクトリが作成され、autoload.phpも出来上がります。
【3】gion.php(呼び出し先のファイル)の作成
先ほどcomposer.jsonで設定した名前空間をここで使います。
namespace app\japan\kyoto; class Gion { function navi(){ echo "現在の八坂神社は明治以前は神仏習合であり祇園社(ぎおんしゃ)と称し、鴨川一帯までの広大な境内地を保有していたが、そのためこの界隈のことを祇園と称する。(wiki)"; } }
ファイル名(gion.php)とクラス名(class Gion)は合わせます。
【4】index.php(実行対象ファイル)の作成
オートロードのファイルをrequireで読み込みます。
名前空間を使ってGionクラスにアクセスします。
require_once "vendor/autoload.php"; $gion = new app\japan\kyoto\Gion(); echo $gion->navi();
【5】動作確認
ブラウザでプレビューしてみます。
http://localhost/autoload/index.php
requireを使わずに外部ファイル(gion.php)のGionクラスのメソッドをコールすることができました。
オートロード成功です。
PHPのオートロードについては以上です。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。