2012-10-31 50 views
0

我有一個自定義的自動加載器在PHP中。搜索路徑設置在一個數組中。 在PHP中我有一個自定義的自動加載器,如何擴展名稱空間?

  • $ autoloadClassPaths [類名] =>絕對文件名
  • 這是一個spl_autoload_register()註冊

    • $ CLASSNAME無載類的名稱
    • $路徑中的目錄:裝載本身功能!

      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]); 
          } 
      

      的問題是,現在我遇到了命名空間。如何寫這個自動加載?

    回答

    1

    用這樣的自動加載器,你可以得到像SomeClassName這樣的任何類的類名。在命名空間類的情況下,您將獲得類名爲SomeNamespace\SomeClassName的命名空間。它包括如果你有一個乾淨的目錄結構,你需要加載文件的所有信息。 (如:庫\ SomeNamespace \ SomeClassName.php)。

    +0

    你的錯。它的自動加載功能已經:)我編輯這 –

    +0

    uhm,那麼爲什麼你遍歷目錄......無論如何我延長我的答案命名空間的東西.. –

    +0

    是啊,但如果目錄結構不是這樣? –