如何在其他try catch块中处理异常?

时间:2017-10-16 12:30:26

标签: php oop

我的例子:

class CustomException extends \Exception {

}

class FirstClass {
    function method() {
        try {
            $get = external();
            if (!isset($get['ok'])) {
                throw new CustomException;
            }

            return $get;
        } catch (Exception $ex) {
            echo 'ERROR1'; die();
        }
    }
}

class SecondClass {
    function get() {
        try {
            $firstClass = new FirstClass();
            $get = $firstClass->method();
        } catch (CustomException $e) {
            echo 'ERROR2'; die();
        }
    }
}

$secondClass = new SecondClass();
$secondClass->get();

这回复给我“ERROR1”,但我想从SecondClass收到“ERROR2”。

在FirstClass块中,try catch应该处理来自external()方法的错误。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

而不是打印错误消息并死于整个php进程,你应该抛出另一个异常并注册一个全局异常处理程序,它对未处理的异常进行异常处理。

class CustomException extends \Exception {

}

class FirstClass {
    function method() {
        try {
            $get = external();
            if (!isset($get['ok'])) {
                throw new CustomException;
            }

            return $get;
        } catch (Exception $ex) {
            // maybe do some cleanups..
            throw $ex;
        }
    }
}

class SecondClass {
    function get() {
        try {
            $firstClass = new FirstClass();
            $get = $firstClass->method();
        } catch (CustomException $e) {
            // some other cleanups
            throw $e;
        }
    }
}

$secondClass = new SecondClass();
$secondClass->get();

您可以使用set_exception_handler

注册一个全局异常处理程序
set_exception_handler(function ($exception) {
    echo "Uncaught exception: " , $exception->getMessage(), "\n";
});