php,异常可以向上抛出2级吗?

标签 php exception try-catch throw

我知道这很奇怪,但在我的代码中,我有开发模式错误和生产模式错误。这是我的功能:

private function error($message, $mysql_error = null){
    if( DEVELOPMENT_MODE ){
        $exp = new Exception();
        $trace = $exp -> getTrace();
        array_shift( $trace ); // removes this functions from trace
        $data["Error Mg"] = $message;
        $data["MySQL Er"] = ( is_null ( $mysql_error ) ) ? "" : $mysql_error;
        array_unshift($trace, $data );
        fkill( $trace );  // formats array and then dies
    }
    else{
        throw new Exception ( $data );
    }
}

我在我的数据库类中写了这个函数,所以如果发生错误,我不必提供检查我们是否处于开发模式!

所以我想我可以将可重用代码外部化。但是,因为我从这个函数中抛出一个异常,所以我基本上只是在使用一个函数,它会返回一个抛出的错误。在生产模式下毫无用处。

每次我想使用它时我都必须这样做:

try{
    $this -> error( "Invalid Link After Connect.", mysql_error () );
} catch ( Exception $exp ){
    throw $exp;
}

不仅仅是

$this -> error( "Invalid Link After Connect.", mysql_error () );

所以为了避免为我想调用的每个错误函数编写一个 try ... catch block ...有没有办法将异常抛出 2 级?

最佳答案

异常会自动沿着调用链向上传播,直到到达最高层。如果它没有在那里被捕获,程序执行将由于未捕获的异常而终止。异常的全部意义在于能够让错误冒出来。您不需要更用力地 throw 或做任何特殊的事情来“将其 throw 到 2 个级别”,这就是它的定义。

关于php,异常可以向上抛出2级吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9663919/

相关文章:

reactjs - 如何从 Action 创建者正确访问错误对象(从后端发送)?

php - 使用 PHP CURL 的 HTTP 请求并从 postman 和 curl cli 得到不同的结果

python StopIteration 与生成器和列表

java保存文件堆栈跟踪

java - 使用嵌入式 Tomcat 的 Web 应用程序只能在 IDE 中运行

c++ - throw 和 throw 与捕获异常的 arg 有什么区别?

c# - Try/Catch Wrap Around Task.Run 不处理异常

php - 连接和转义字符后输出不完整

php - Symfony2/FOS 用户包 - 注册后记住我

PHP类别树递归