0

在搜索完该站点后,我不知道为什么我会收到关于找不到我的类的致命错误,除非我实例化具有前缀名称景观的类,或者注释掉类文件中的名称景观。我正在使用 PSR-0 尝试解决这个问题,但没有运气,还有这个线程在这里,这是最接近我的问题。

自动加载器代码:

    function autoload($className)
{
    $className = ltrim($className, '\\');
    $fileName  = '';
    $namespace = '';
    if ($lastNsPos = strrpos($className, '\\')) {
        $namespace = substr($className, 0, $lastNsPos);
        $className = substr($className, $lastNsPos + 1);
        $fileName  = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
    }
    $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';

    require $fileName;
}

spl_autoload_register('autoload');

所有三个文件(Autoloader.php、Class.php、index.php)的路径都在同一目录级别。没有子目录或类似的东西。

自动加载器代码在 index.php 的开头使用 require_once("Autoloader.php");

类在 $foo = new classFoo(); 处被调用

tl;博士版本:

  • 在被调用的类中注释掉 namescape 声明?工作正常。
  • 使用名称景观/类格式实例化类?工作正常。
  • 除此以外?致命错误:找不到类(即使它位于同一目录中。
4

1 回答 1

1

如果你在全局命名空间中,而类在其他命名空间中,那么即使文件是require通过自动加载器或手动加载的,在声明类时仍然需要使用命名空间。这就是命名空间的重点,以防止类名冲突。

看起来您可能正在混合PSR-0PSR-4,因为您有命名空间的类,但它们的路径不正确\<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>

于 2014-03-27T20:49:11.973 回答