0

PHPにカスタムオートローダーがあります。検索パスは配列で設定されます。読み込み自体:

  • $classname ロードされていないクラスの名前
  • ディレクトリの $path
  • $autoloadClassPaths [クラス名] => 絶対ファイル名

これは spl_autoload_register() 登録関数です!

    if (!isset($autoloadClassPaths[$classname]))
    {
        foreach ($path as $dir)
        {
            foreach (new DirectoryIterator($dir) as $fileinfo)
            {
                if (substr($fileinfo->getFilename(), -4) == '.php')
                {
                    $tokens = token_get_all(file_get_contents($fileinfo->getPathname()));
                    $count = count($tokens);
                    for ($i = 2; $i < $count; $i++)
                    {
                          if (  ($tokens[$i - 2][0] == T_CLASS || $tokens[$i - 2][0] == T_INTERFACE)
                             && $tokens[$i - 1][0] == T_WHITESPACE
                             && $tokens[$i][0] == T_STRING)
                          {
                               $autoloadClassPaths[$tokens[$i][1]] = $fileinfo->getPathname();
                          }
                    }
                }
            }
        }
    }
    else
    {
        require ($autoloadClassPaths[$classname]);
    }

問題は、名前空間に遭遇したことです。これを自動ロードする方法は?

4

1 に答える 1

1

このようなオートローダーを使用すると、のような任意のクラスのクラス名を取得できますSomeClassName。名前空間付きクラスの場合、次のようなクラス名を持つ名前空間を取得しますSomeNamespace\SomeClassName。クリーンなディレクトリ構造がある場合は、ファイルをロードするために必要なすべての情報が含まれています。(例:library \ SomeNamespace \ SomeClassName.php)。

于 2012-10-31T12:51:04.647 に答える