在PHP中我有一个自定义自动加载器,如何扩展名称空间?

时间:2012-10-31 12:45:41

标签: php namespaces autoloader

我在php中有一个自定义自动加载器。搜索路径设置在一个数组中。装载本身:

  • $ classname非加载类的名称
  • $ path the directories
  • $ autoloadClassPaths [classname] =>绝对文件名

这是一个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]);
    }

问题是我现在遇到名称空间。如何写这个自动加载?

1 个答案:

答案 0 :(得分:1)

使用此类自动加载器,您可以获得类似SomeClassName的任何类的类名。在命名空间类的情况下,您可以使用类似SomeNamespace\SomeClassName的类名获取命名空间。如果您有一个干净的目录结构,它包含加载文件所需的所有信息。 (例如:library \ SomeNamespace \ SomeClassName.php)。