Edited at

PHPのautoloadについて

More than 1 year has passed since last update.


autoloadとは

ファイルを自動で読み込む仕組みのこと。

クラスを作成する場合、再利用する性質上1クラスを1ファイルで管理することになる。

しかし扱うファイル数が増えた時に、各スクリプトの先頭で一つ一つrequireしなければいけなくなる。

そこでファイルを自動で読み込む仕組みであるautoloadを使用する。


spl_autoload_register

通常autoloadも使用せずファイルの読み込みも行っていない場合、このタイミングでfatal errorになる。

<?php

$hoge = new Hoge(); //fatal error

spl_autoload_registerを使用してオートローダーを登録しておくと、PHPがエラーで止まる前に登録したメソッドが呼び出される。


spl_autoload_registerを使わない場合


<?php
require_once 'MyClass1.php';
require_once 'MyClass2.php';
require_once 'MyClass3.php';

$obj = new MyClass1();
$obj2 = new MyClass2();
$obj2 = new MyClass3();


spl_autoload_registerを使う場合


<?php
spl_autoload_register(function ($class_name) {
require_once $class_name . '.php';
});

$obj = new MyClass1();
$obj2 = new MyClass2();
$obj3 = new MyClass3();


composerでautoloadを設定する

spl_autoload_registerを使用して自前で作成しなくても、composer-autoloadで実装が出来る。


composerをダウンロード

$ curl -s https://getcomposer.org/installer | php


conposer.jsonファイル

composer.jsonというファイルを作成し、autoloadの設定をしていく。

{

"autoload": {
"psr-4": {
"Namespace\\": "DirName/"
}
}
}

psr-4という規約にのっとって作成し、namespace Namespaceと宣言されたクラスは、DirNameというディレクトリの中にあるということを設定している。


autoload.phpの作成

$ composer dump-autoload

これでvenderディレクトリにautoload.phpが作成される。

あとは作成されたautoload.phpをbootstrap.phpなどでrequireすればautoloadが使用できる。

(bootstrap.phpはアプリケーション全体の設定を作成する・読み込むのに使用されるファイルのこと。)