原諒我,如果我讀過這個問題錯了 - 我不認爲這個地方需要用例的 - 但我認爲這樣的事情會工作:
<?php
class MyException extends Exception {}
/*
* This method is in the library. It's not in your control
*/
function doStuff(callable $callback) {
try {
$callback();
} catch(Exception $e) {
die($e->getMessage());
}
}
/*
* We want to do something, but not let any MyException pass through to doStuff()
*/
doStuff(function() {
try {
connect('mysql:dbname=IDoNotExist;host=127.0.0.1', 'batman', 'robin');
} catch(MyException $e) {
return; // Do nothing with MyException, continue as if it didn't happen
} catch(Exception $e) {
throw new Exception($e); // Not an instance of MyException ... let the library handle it
}
});
/*
* This is dummy code that will throw MyException if the username and password are incorrect
*/
function connect($dsn, $username, $password) {
try {
$dbh = new PDO($dsn, $username, $password);
} catch(PDOException $e) {
throw new MyException($e->getMessage());
}
}
我假設,由閱讀評論和你的迴應,那doStuff()
是你通過callable
來的一些圖書館電話。如果您的回調中的代碼獲得MyException
,您希望完全忽略此操作。
上面的代碼將完全忽略MyException
,就好像什麼也沒有發生。儘管我絕不會主張這樣的解決方案。
我不認爲你可以。 – Barmar
用例?我沒有看到不允許回調處理他們自己的異常的原因,這個回調本來就是拋出異常的原因。 – Devon
@Devon我懷疑用例是回調使用他的庫,並且庫引發異常。 – Barmar