在自动加载的实现文件中找不到PHP类


PHP class not found in autoloaded implementation file

我真的希望这不是重复的,但我来了:

我使用Zend的自动加载器来加载类。它似乎可以工作,至少它在实例化我的类(Common_TestTest)时加载了正确的文件,该类在Common/TestTest.php中实现

"在Common/TestTest.php中找不到类Common_TestTest。"

在TestTest.php中除了类之外没有其他内容

<?php
class Common_TestTest extends PHPUnit_Framework_TestCase
{
    public function testTesting() {
        $this->assertTrue(true);
        $this->assertFalse(true);
    }
}

我尝试在文件末尾转储get_declared_classes,一切看起来都很好,Common_TestTest是声明的类之一,但在离开文件时仍然抛出异常。

最有趣的一点是:当我将类的名称从Common_TestTest更改为TestTest时,同样的事情也会发生——只是错误消息将缺少的类的名称声明为"TestTest"。因此,它肯定会看到这个类,并对它的存在做出反应。

关于问题的原因,我想到了两种可能性:

  1. 类名和文件名之间的大小写不匹配,例如Testtest.php

  2. 注册命名空间时,您使用"Common"而不是"Common_"。Zend_Loader_Autoloader不区分PHP 5.3风格的命名空间和ZF风格的命名空间(而是Prefix)。通过添加下划线,您可以确保您的命名空间被解释为类前缀,而不是真正的命名空间。