次のコードを実行すると:
// autoload classes
spl_autoload_register(function($class) {
require_once("$class.php");
});
スクリプトと同じディレクトリに含まれるすべてのクラスで機能します。ただし、別のディレクトリにあるクラスはロードに失敗します。次の解決策が機能します。
define('ABSOLUTE_PATH', "/var/www/application");
// autoload classes
spl_autoload_register(function($class) {
// class directories
$dir = array(ABSOLUTE_PATH,
ABSOLUTE_PATH . '/models');
foreach($dir as $path) {
$file = sprintf('%s/%s.php', $path, $class);
if(is_file($file)) {
require_once($file);
}
}
});
しかし、これは醜い感じです。名前空間を使用できることを読みましたが、名前空間やその他のものを機能させることができないようです。ディレクトリパスをハードコーディングする必要がない、より洗練されたソリューションが存在する場合は、誰かに教えてもらえますか?