如果要在類不存在的情況下拋出異常,可以使用class_exists()
。
一個簡單的例子可能看起來像:
function createClass($class)
{
if (!class_exists($class)) {
throw new Exception(
sprintf('Class %s does not exist', $class)
);
}
return new $class;
}
try {
$asdfasdfasdf = createClass('Asdfasdfasdf');
} catch (Exception $e) {
echo $e->getMessage();
}
從我的經驗,大多數PHP框架拋出某種異常時,未發現了一類 - 例如,Symfony2中拋出一個ClassNotFoundException
。這就是說,我不知道你是否可以「捕捉」到,這可能只是一種發展援助。
PHP 7剛剛發佈,根據我對規範的理解,您將能夠趕上fatal error
作爲EngineException
。我不知道它是否適合你的例子。我還沒有測試過,因爲我還沒有安裝PHP 7。我在一個在線REPL上嘗試了PHP 7的alpha版本,看起來它不起作用。
但是爲了完整性,這裏是從RFC一個例子:
function call_method($obj) {
$obj->method();
}
try {
call_method(null); // oops!
} catch (EngineException $e) {
echo "Exception: {$e->getMessage()}\n";
}
// Exception: Call to a member function method() on a non-object
在任何情況下,如@MarkBaker和@MarcB在問題的評論中指出,你不能「趕」在以前的版本fatal error
PHP。
希望這有助於:)
致命錯誤也不例外,例外情況是例外....我建議你閱讀有關[例外](http://www.php.net/manual/啓動en/language.exceptions.php) –
致命錯誤無法捕捉。他們不會拋出任何東西。如果你想「捕捉」這種事情,你必須註冊一個錯誤處理程序/關閉腳本。 –
@MarkBaker已閱讀文檔,請告訴我,在哪一行中,文檔說異常無法捕獲錯誤,以及哪種錯誤無法通過異常來捕獲 – lovespring