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はアプリケーション全体の設定を作成する・読み込むのに使用されるファイルのこと。)