在函数中捕获异常,在try-catch内部调用。不行,为什么?

时间:2019-07-30 17:55:53

标签: php function class try-catch

我正在尝试在try块中调用一个函数,如果失败,则捕获异常。我的代码无法正常工作,我在做什么错?抱歉,我是新来的例外。 有人吗任何帮助表示赞赏:D

我尝试了什么,什么没用:

function check ($func) {
    try {
        call_user_func($func);
    } catch (Exception $e) {
        echo "An error occurred.";
    }
}

function test () {
    echo 4/0;
}

check("test");

仅返回“ INF”和“被零除”错误,但应捕获该异常并返回“发生错误”。

1 个答案:

答案 0 :(得分:3)

尝试使用set_exception_handler()抛出非对象将导致PHP致命错误。

有关更多详细信息-

1- https://www.php.net/manual/en/language.exceptions.php#language.exceptions.catch

2- https://www.php.net/manual/en/class.errorexception.php

尝试下面的代码,现在错误将被捕获。

   function exception_error_handler($severity, $message, $file, $line) {
    if (!(error_reporting() & $severity)) {
        // This error code is not included in error_reporting
        return;
    }

    if($message == 'Division by zero'){
        throw new DivisionByZeroError('Division By Zero Error');
    }else{
        throw new ErrorException($message, 0, $severity, $file, $line);
    }
}

set_error_handler("exception_error_handler");



function check ($func) {
    try {
        call_user_func($func);
    } 


    catch (DivisionByZeroError $e) {
        echo "An Division error occurred - ".$e->getMessage(); //$e->getMessage() will deisplay the error message
    }


    catch (Exception $e) {
        echo "An error occurred - ".$e->getMessage(); //$e->getMessage() will deisplay the error message
    }
}

function test () {


    echo 4/0;

}

check("test");