どうも、シローです。
今回はPHPのオートロードについてまとめてみました。
オートロードとは
オートロードとは、クラスを必要な時に読み込む仕組みです。
定義されていないクラスを使おうとしたときに、指定されたオートロード関数が呼び出されます。
これのメリットは開発者がオートロード関数の実装を適切に行うことで、クラスが必要とされたタイミングで適切なクラスを読み込む処理を記述することができます。
PHPのWebフレームワークはこのオートロードを利用して作られています。
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php function __autoload($name) { $filename = $name . '.php'; if (is_readable($filename)) { require $filename; } } $obj = new Hoge(); $obj->hello(); |
1 2 3 4 5 6 7 8 9 |
<?php class Hoge { public function hello() { echo 'Hello '. __CLASS__, PHP_EOL; } } |
この場合、sample_autoload.phpでクラスHogeをnewしていますが、このとき、まだHogeのクラス定義は存在していません。
そこで、__autoload()関数で'Hoge'を引数として呼び出されます。この例では、__autoload()関数の実装は、「クラス名.php」というファイルが読み込み可能であれば、requireするという実装になっています。
Hoge.php内にクラスHogeの定義があれば、Hogeクラスのインスタンスが作られます。
注意点
__autoload()関数には2つの問題があります、それは
- グローバル関数でなければいけないこと
- 処理を1つしか実装できないこと
です。
この問題を解決するのがspl_autoload_register()関数なのですが、この話は次回で。。
参考
パーフェクトPHP