[英]PHP try-catch block not catching issues as expected
我有以下代碼可以正常工作(必須捕獲異常),但事實並非如此。
<?php
class Entertainment {
}
class Clown extends Entertainment{
}
class Job {
}
function handleEntertainment(Entertainment $en, callable $callback = NULL){
try{
print("Handling " . get_class($en) . " is fun");
if($callback !== NULL){
$callback();
}/*else {
print("<br />" . "Function must be given!");
}*/
}catch(Exception $e){
echo("Exception: " . $e->getMessage() . " Line: " . $e->getLine());
}
}
$functionCallback = function(){
print("<br />". " I am a function");
}
?>
這是測試文件
<?php
require_once("manyclasses.php");
try{
handleEntertainment(new Clown());
handleEntertainment(new Job());
}catch(Exception $e){
echo("Exception: " . $e->getMessage() . " Line: " . $e->getLine());
}
?>
第二個調用handleEntertainment(new Job());
應該拋出一個異常並且必須被捕獲,但是它不能那樣工作。 我得到的是
Catchable fatal error: Argument 1 passed to handleEntertainment() must be an instance of Entertainment, instance of Job given, called in ................
我試圖在這里搜索答案,但是我讀的帖子讓我更加困惑。 有人說警告和錯誤未作為異常捕獲。
我的理解是警告和錯誤也是例外,try and catch塊必須能夠捕獲它們。
為什么不起作用,為什么警告和錯誤不是異常?
這是因為“ Catchable Fatal Error
是使引擎處於不穩定狀態的錯誤,因此應中止執行。
考慮一下:在“正常”異常之后,有時可以恢復程序執行流,而在這種情況下,最好中止執行。
但是,如果需要,您可以定義自己的錯誤處理程序並使執行繼續進行
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.