簡體   English   中英

PHP try-catch塊未按預期捕獲問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM