PHP5 からは、オブジェクト指向言語らしくクラスのオートローディングが可能になりました。
具体的には、明示的に require_once “foo.php” としなくても、
function __autoload($class){
include_once $class . “.php”;
}
としておけば、
$foo = new foo;
とした時に include_path から自動的に foo.php をインクルードしてくれる,というものです。
ただ、class_exists()はデフォルトで__autoload()を呼び出すらしいので __autoload() の実装は以下のような感じにするのがよさそうです。
function __autoload($class){
// 検索する拡張子一覧
$exts = array(“php”, “inc”, “class.inc”, “class.php”);
// 検索するディレクトリ一覧( “./” や “../” で始めると,その指定については include_path を見なくなるので注意 | PHP マニュアル include() 参照)
$dirs = array(“”, “include/”, “classes/”);
// include_path を検索し、存在すればそのファイルをインクルードする。
// 存在しなければ何もしない。
foreach($dirs as $dir){
foreach($exts as $ext){
$file = $dir . $class . “.” . $ext;
// echo “Debug: trying $file \n”;
if($fp = @fopen($file, “r”, 1)){
@fclose($fp);
require_once $file;
return;
}
// PEAR Style
$file = $dir . str_replace(“_”, “/”, $class) . “.” . $ext;
// echo “Debug: trying $file \n”;
if($fp = @fopen($file, “r”, 1)){
@fclose($fp);
require_once $file;
return;
}
}
}
}