2012-01-30 82 views
-1

没有发现我真的希望这不是一个重复的,但在这里我去PHP类:在自动加载实现文件

我使用Zend的自动加载机加载类。它似乎工作,至少它在实例化Common/TestTest.php中实现的类(Common_TestTest)时加载了正确的文件。但后来我收到以下错误信息:

“在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

你在使用命名空间吗? – DaveRandom 2012-01-30 13:16:31

+0

除了名称空间:哪个组件正在提供错误消息?它是Zend吗?消息涉及哪个目录?这是一个相对路径,不是绝对的,所以这会很有趣。如果自动加载器查找错误的目录,则找不到该文件。 – hakre 2012-01-30 13:23:02

+0

这显然是一个测试类。它是否存储在应用程序/ Common或Test FIles/Common中?如果它位于Testing Files/Common中,那么在引导测试套件时可能会遗漏一条路径。 – RockyFord 2012-01-30 14:12:55

回答

0

有2种可能性,来我的心是什么原因导致的问题:

  1. 你有类名和文件名,例如之间的一些情况下,不匹配Testtest.php

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