すべてのディレクトリをスキャンし、各ファイルに含まれるクラスを保存するカスタム オートローダーを作成しようとしています。これは私が持っているすべてです:
define ('PATH', 'C:\work\Symfony-1.4.20');
$files = array();
$map = array();
function loadClassLoader($name)
{
global $map, $files;
foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator(PATH)) as $file)
{
$file2 = $file->__toString();
if (strtolower($file2) != strtolower(__FILE__) &&
$file->getExtension() == 'php' &&
!isset($files[$file2]))
{
$files[$file2] = true;
$classesNow = get_declared_classes();
require ($file2);
foreach (array_diff (get_declared_classes(), $classesNow) as $c)
{
$reflection = new ReflectionClass($c);
$map[$c] = $reflection->getFileName();
unset ($reflection);
}
}
}
}
spl_autoload_register('loadClassLoader');
loadClassLoader ('');
echo '<pre>'; var_dump ($map); echo '</pre>';
残念ながら、大規模なシステムでは機能しません。このロジックに欠けているものは何ですか?
エラーメッセージは次のとおりです。Fatal error: Class 'BaseForm' not found in C:\Work\symfony-1.4.20\lib\form\addon\sfFormObject.class.php on line 20