PHPではPHP: クラスのオートローディング - Manualという仕組みがあります。
オートローダーにクラスを登録することで、`require_once'などで明示的にクラスが定義されたphpファイルを読み込む宣言を書かなくとも、必要になった際に自動でクラスを読み込んでくれます。
今回はComposerでローカルの独自クラスをオートローダーに登録する方法を紹介します。
ディレクトリ構造
今回の実験で利用するディレクトリ構造とソースコードの内容です。
ディレクトリ構造
.
├── MyClass
│ ├── Cat.php
│ └── Dog.php
├── composer.json
├── main.php
└── vendor
├── autoload.php
└── composer
├── ClassLoader.php
├── LICENSE
├── autoload_classmap.php
├── autoload_namespaces.php
├── autoload_psr4.php
└── autoload_real.php
Dog.php
<?php
class Dog {
public function bow() {
return "わんわん!";
}
}
Cat.php
<?php
class Cat {
public function mew() {
return "みゃ〜〜〜";
}
}
main.php
<?php
require_once 'vendor/autoload.php';
// Dog.php,Cat.phpがオートローダーに登録されるので自動で読み込まれる
$dog = new Dog();
$cat = new Cat();
echo $dog->bow().PHP_EOL;
echo $cat->mew().PHP_EOL;
composer.jsonの設定
composer.jsonのautoload
プロパティのclassmap
に登録したいクラスのパスを記述します。
composer.json
{
"autoload" : {
"classmap" : [
"MyClass/Dog.php",
"MyClass/Cat.php"
]
}
}
composer.jsonの内容を反映
以下のコマンドを実行して記述した内容を反映させます。
$ composer dumpautoload
実行結果
Composerによりオートローダーにクラスが登録されたので、DogクラスとCatクラスが自動で読み込まれます。
$ php main.php
わんわん!
みゃ〜〜〜
参考文献
【CentOS】Composerを使ってオートロードする方法
http://mikaduki.info/os/centos/1391/
The composer.json Schema - Composer
https://getcomposer.org/doc/04-schema.md#classmap