php - 在 PHP 中,我有一个自定义的自动加载器,如何为命名空间扩展它?

标签 php namespaces autoloader

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

  • $classname 未加载类的名称
  • $path 目录
  • $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]);
        }
    

    问题是现在我遇到了命名空间。这个自动加载怎么写?

    最佳答案

    使用这样的自动加载器,您可以获得任何类的类名,例如 SomeClassName .如果是命名空间类,你会得到类名的命名空间,就像这样 SomeNamespace\SomeClassName .如果您有一个干净的目录结构,它包括加载文件所需的所有信息。 (例如:library\SomeNamespace\SomeClassName.php)。

    关于php - 在 PHP 中,我有一个自定义的自动加载器,如何为命名空间扩展它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13158285/

    相关文章:

    使用命名空间时找不到 PHP 类

    php - ZF2 : autoloading libraries without namespaces

    php - Laravel 别名找不到类

    php - 在服务器上加载图像时出错

    php - Laravel 5 按最多计数子记录排序

    php - Laravel4/PHP : extending a class within different namespaced levels

    composer-php - 我的 Composer psr-4 自动加载有什么问题?

    php - 选择 PHP 缓存技术 : output caching into files vs. 操作码缓存

    php - 为什么我不能在 PHP 中回显数据库中的信息?

    javascript - 如何将字符串变量转换为命名空间对象