Composerを使ったPHPのオートロード

2019/08/29

PHPでは通常 require_once "sample.php" のように使用したいファイルを明示的に読み込む必要があります。

これを自動的に読み込んでくれる仕組みがオートロードです。

Composer はパッケージを管理する機能以外にも、オートロードという機能もあわせ持ちます。

require文を使用しなくてもクラスファイルを読み込むことができます。

Laravel でも Composer によるオートロードの仕組みを利用しています。

laravel のエントリーポイント(処理の起点)である /public/index.php にオートロードが記述されています。


# public/index.php
require __DIR__.'/../bootstrap/autoload.php';

 

requireの参照元となっている bootstrap/autoload.php を開くとオートロードの記述が見つかります。


# bootstrap/autoload.php
equire __DIR__.'/../vendor/autoload.php';

 

今回はこのオートロードの仕組みを理解するために Laravel を使わず、素の PHP でオートロードの仕組みを作成してみます。

 

ディレクトリ構成

目的:sample01.phpからMessage.phpのクラスを使用します。


C:.
│  composer.json
│  sample01.php
│
└─app
    └─Models
       Message.php

 

手順

composer.jsonを作成

「composer.json」というファイルを新規作成し、以下のように中身を入れます。


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

 

解説
  • PSR-4というルールに従ってオートロードを使用します。
  • 物理ディレクトリapp配下をAppから始まる名前空間として使用します。

 

Composerコマンドを実行


composer install

 

これでvendorディレクトリが作成され、autoload.phpもできます。

ポイント

Composerコマンドが実行できるように事前にComposerをインストールしておく必要があります。

 

実行対象のファイル(Message.php)を作成


<?php
namespace App\Models;

class Message{

    function hello(){
        echo "Hello World!";
    }
}

 

解説

ファイルが配置されているディレクトリと同様の構造の名前空間を指定します。

App というディレクトリはありませんが、composer.json で appディレクトリ配下を App で指定する設定にしたためこうなります。

appディレクトリ配下のファイルはすべてディレクトリ構造と名前空間を合わせればオートロード対象となります。

ファイル名(Message.php)とクラス名(class Message)を合わせる必要があります。

 

呼び出し先のファイル(sample01.php)を作成


<?php
require_once "vendor\autoload.php";

$message = new App\Models\Message();

echo $message->hello();

 

解説

vendor/autoload.php を require_once します。これだけでOKで、ほかのファイルの require は不要です。

クラスを使用するには、ディレクトリ構造と対になった名前空間を指定します。

App というディレクトリはありませんが、composer.json で appディレクトリ配下を App で指定する設定にしたためこうなります。

 

動作確認

コマンドプロンプト/ターミナルで以下のコマンドを実行します。


php sample01.php

 

 
"Hello World!" と表示されればOKです。

以上です。

本庄マサノリ

仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-周辺知識