LoginSignup
8
3

More than 5 years have passed since last update.

Composerを利用してクラスのオートーロードを実現

Last updated at Posted at 2016-06-13

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

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3