2011-06-09 25 views
16

我遇到了一個有趣的困境。在DataMapper類中,我生成一個類名,用於從數據庫返回的行。如何在不觸發錯誤的情況下檢測類是否存在

問題是,我所有的類都是自動加載的,可以來自很多地方(庫,應用程序/模型等),我想檢查生成的類名是否存在。現在,人們可能會認爲:

try 
{ 
    $test = new $className(); 
} 
catch(Exception $ex) 
{ 
    // Class could not be loaded 
} 

(而不是拋出一個異常),當然,PHP錯誤稱的類,但找不到...不是非常有幫助。在Zend_Loader中重寫自動加載器以搜索所有目錄以查看該類是否可以加載,是否有無法完成此操作?

對於任何人想知道爲什麼我需要這樣做而不是讓Class Not Found錯誤出現,如果找不到類,我想在預定的位置生成一個類來讓我的生活這個項目一直很順利。

在此先感謝! Terry

P.S.讓我知道你們是否需要更多信息。

回答

26

PHP函數class_exists()有一個標誌來觸發自動加載如果該類不應該沒有加載:

http://www.php.net/class_exists

所以你只要寫

if (!class_exists($className)) { 
    // generate the class here 
} 
+0

好吧,不要覺得愚蠢現在。我看到該頁面,閱讀描述「已定義」並跳過參數。謝謝! – TJMonk15 2011-06-09 21:38:03

+3

我還必須將第二個參數($ autoload)設置爲false – waaadim 2013-12-23 13:58:13

相關問題