1

すべてのディレクトリをスキャンし、各ファイルに含まれるクラスを保存するカスタム オートローダーを作成しようとしています。これは私が持っているすべてです:

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

4

0 に答える 0