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。如果您有一个干净的目录结构,它包括加载文件所需的所有信息。(如:库\SomeNamespace\SomeClassName.php)。

于 2012-10-31T12:51:04.647 回答