オートロードについて

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のクラスをコールします。

C:\xampp\htdocs/autoload
│ 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 を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-周辺知識