オブジェクト指向アプリケーションを作成する開発者の多くは、 クラス定義毎に一つのPHPソースファイルを作成します。 最大の問題は、各スクリプトの先頭に、必要な読み込みを行う長いリストを 記述する必要があることです(各クラスについて一つ)。
PHP 5では、これはもう不用です。 未定義のクラス/インターフェイスを使用しようとした時に 自動的にコールされる __autoload 関数を定義することができます。 この関数をコールすることにより、 スクリプトエンジンは、PHPがエラーで止まる前にクラスをロードする最後の チャンスを与えます。
注意: __autoload 関数の内部でスローされた例外は、 catch ブロックでキャッチすることが できず、致命的なエラーとなります。
注意: オートローディングは、PHP を CLI 対話モード で実行している場合は使用できません。
注意: クラス名をたとえば call_user_func() などで使用する場合、 ../ のような危険な文字が含まれることもあり得ます。 このような関数にはユーザの入力を渡さないことをおすすめします。 あるいは最低限 __autoload() の中で入力内容を検証するようにします。
例1 オートロードの例
この例は、 クラス MyClass1 および MyClass2 をそれぞれ MyClass1.php および MyClass2.php からロードします。
<?php
function __autoload($class_name) {
include_once $class_name . '.php';
}
$obj = new MyClass1();
$obj2 = new MyClass2();
?>
例2 オートロードの別の例
この例は、インターフェイス ITest をロードしようとします。
<?php
function __autoload($name) {
var_dump($name);
}
class Foo implements ITest {
}
/*
string(5) "ITest"
Fatal error: Interface 'ITest' not found in ...
*/
?>