2015-01-09 58 views
0

我有以下腳本。什麼類型的異常拋出自定義錯誤?

根據http://php.net/manual/en/class.pdoexception.php,您不應該從您自己的代碼中拋出PDOException。

但是我想要執行同樣的catch,無論是PDOException還是我爲無效foo投擲的異常。

我也被告知我不應該捕獲泛型異常,但只捕獲特定的異常。

這應該如何實施?

try { 
    db::db()->beginTransaction(); 

    //Do a bunch of queries, and a PDO exception will be thrown upon error 

    if($foo($bar)) {throw new Exception('Invalid foo.');} 

    db::db()->commit(); 
} catch (PDOException $e) { 
    db::db()->rollBack(); 
    //Maybe do some other stuff 
} 
+0

不要覺得有什麼不妥一般例外。你可以拋出並捕獲RuntimeException –

回答

0

喜歡的東西

try { 
    db::db()->beginTransaction(); 

    //Do a bunch of queries, and a PDO exception will be thrown upon error 

    if($foo($bar)) {throw new RuntimeException('Invalid foo.');} 

    db::db()->commit(); 
} catch (PDOException $e) { 
    db::db()->rollBack(); 
    //Maybe do some other stuff 
} catch (RuntimeException $e) { 
    //foo invalid 
} 
+0

謝謝安東尼。所以,如果我想回滾一個'RuntimeException',只需在兩個catch語句中重複代碼? – user1032531

+0

或者只是拋出並捕獲一個通用的異常。或者將回滾代碼放在一個函數中,並在兩個地方調用該函數。 –

+0

最後一個問題。任何原因我不想拋出一個RuntimeException,並捕獲一個通用的異常? – user1032531