2012-01-30 33 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風格命名空間(而不是前綴)。通過追加下劃線,可以確保您的名稱空間被解釋爲類前綴而不是真實名稱空間。