2012-02-09 121 views
1

我使用spl_autoload_register來加載某些類,當它們需要時,但是當我的自動加載方法找不到類時,如何捕獲錯誤?如何捕捉「class not found」錯誤

現在,我看到的唯一解決方案是在自動加載回調中顯示一條可愛的錯誤消息,並停止應用程序,以防止出現錯誤。

但我不想停止應用程序。我想繼續並跳過需要的缺失類的實例化(在我的具體情況下,它們並非嚴格要求應用程序繼續運行)

+1

相近職位[這一個](http://stackoverflow.com/questions/1579080/throwing-exceptions-in-an-spl-autoloader)。 – 2012-02-09 20:54:43

回答

8

在加載並適當處理結果之前使用class_exists()。如果存在,按照慣例進行實例化。如果沒有,則跳過實例化。

+0

謝謝!它的工作原理:D我覺得很愚蠢,因爲沒有想過嘗試這樣做 – Alex 2012-02-09 21:00:00

+0

必須在每個實例化之前使用'class_exists'是一件痛苦的事情,並且無論如何使用它都會觸發加載器。不妨將它用在裝載機上。 – Leigh 2012-02-09 21:00:16

+0

@Leigh是的,它絕對應該在自動加載器中實現。 – kba 2012-02-09 21:12:22

2

爲了消除錯誤,您可以在被調用時動態創建缺失的類,儘管我不推薦這種方法。

下面的代碼爲我工作:

function __autoload($name) { 
eval("class {$name} {}"); 
} 

echo 'pass 1'; 
$a = new a(); 
echo 'pass 2'; 
+1

ewww ...'eval' :( – Leigh 2012-02-09 20:58:29

+0

聰明但危險 – Cyclone 2012-02-09 20:58:31

+0

也... ewww ..'__autoload' – Leigh 2012-02-09 21:04:05