抛出新异常不会停止代码

时间:2016-02-18 19:50:53

标签: php

我想停止代码执行(所有应用程序代码)。实际上我管理这段代码:

try
    {
        $connection = mysqli_connect(   $this->_host,
            $this->_username,
            $this->_dbPass,
            $this->_dbName  );

        if(mysqli_connect_errno())
        {
            throw new Exception("problem in connection.");
        }
    }
    catch(Exception $ex)
    {
        header($_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Error', true, 500);
        echo json_encode(array("success" => false, "message" => $ex->getMessage()));
        return;   //<- application don't end
        //exit(); //<- application end
     }

现在,如果我在上面的代码块之后调用另一个方法,用return语句打印“hello world”,我得到回声,但如果我使用exit(),我看不到任何回声。所以我的问题是:抛出一个新的异常不要停止应用程序实例?我必须使用exit()在异常后停止它而不是返回吗?

1 个答案:

答案 0 :(得分:3)

评论中有相当多的讨论,但为了回答手头的问题,返回会停止在全局范围内执行脚本。

http://sandbox.onlinephpfunctions.com/code/59a49286b1cbb62e92fd95134593c2da5ef94468

示例:

<?php

try {
    throw new Exception('Hello');
}
catch (Exception $e) {
    return;
}
echo "hello world"; // Not reached

?>

如果未被捕获,异常将停止执行。否则,如果捕获到异常,则适用相同的规则。在全局范围内,return将退出应用程序,在函数或方法内,返回只会退出函数。

exit()die()将退出应用程序,无论它们被调用的范围如何。