2010-07-29 102 views
3

我正在嘗試使用異常。新手:拋出新的異常 - 我們可以更改異常名稱嗎?

所以我有這樣的:

如果發生什麼壞事:

throw new CreateContactException($codigo, $result->msg); 

稍後,我會嘗試,如果不正常,美中不足的是:

try 
{ 
    createContact(); 
} 
catch(CreateContactException $e) 
{ 
    $error .= 'An error occurred with the code:'.$e->getCode().' and message:'.$e->getMessage(); 
} 

1) 這項工作?我的意思是,這個getCode()和getMessage()與CreateContactException參數沒有關係嗎?

2) 我必須在某處創建一個CreateContactException類來擴展Exception嗎?我的意思是,我們可以爲我們的例外定製名稱,而無需創建擴展類?

非常感謝提前, MEM

回答

12

例外,必須僅僅是子類的內置Exception類,這樣你就可以創建一個新的像這樣:

class CreateContactException extends Exception {} 

試圖拋出其他類作爲例外將導致錯誤。

使用不同的名字的好處是,你可以有多個catch塊,所以你可以捕捉不同類型的異常,讓別人漏網之魚:

try { 
    // do something 
} 
catch (CreateContactException $e) { 
    // handle this 
} 
catch (DomainException $e) { 
    // handle this 
} 
+0

確定。所以這將是第一件事。創建一個擴展Exception的類。 如果它是空的,爲什麼不直接使用Exception呢? – MEM 2010-07-29 10:43:59

+0

假設我們創建了這個類,我們如何將getCode和getMessage與我們的throw參數相關聯? 我有點失去了我意識到...... 再次感謝 MEM – MEM 2010-07-29 10:45:57

+1

'爲什麼不使用異常instead' 因爲你想更具體的,並能夠引發和捕獲特定的異常類型。 由於它擴展了Exception,它繼承了Exception的所有方法,所以getCode和getMessage都可以工作。 – Mchl 2010-07-29 10:48:37