PHP错误处理:die()Vs trigger_error()Vs throw异常
来源:互联网 发布:nes30 pro软件 编辑:程序博客网 时间:2024/05/16 14:19
问题描述:
关于PHP中的错误处理 - 到目前为止,我知道有3种样式:
1. die()或exit()风格:
$con = mysql_connect("localhost","root","password");
if (!$con) {
die('Could not connect: ' . mysql_error());
}
2. throw Exception 样式:
if (!function_exists('curl_init')) {
throw new Exception('need the CURL PHP extension.
Recomplie PHP with curl');
}
3. trigger_error() 样式:
if(!is_array($config) && isset($config)) {
trigger_error('Error: config is not an array or is not set', E_USER_ERROR);
}
现在,在PHP手册中,使用三种方法。
我想知道的是我应该选择哪种风格,为什么?
这3个是否相互替代,因此可以互换使用?
另外:只是我或大家都认为PHP错误处理选项太多了,这在很大程度上混淆了PHP开发人员?
答案
第一个不应该在生产代码中使用,因为它传输与最终用户无关的信息(用户不能做任何关于“无法连接到数据库”)。
如果您知道在某个关键代码点,您的应用程序可能会失败,并希望您的代码在多个调用级别恢复,您将抛出异常。
trigger_error()
让您精细的错误报告(通过使用不同级别的错误消息),您可以隐藏最终用户(使用set_error_handler()
)的错误,但仍然在测试期间向您显示错误。
还trigger_error()
可以生成在开发期间重要的非致命消息,可以使用自定义错误处理程序抑制生产代码。你也可以产生致命的错误(E_USER_ERROR
),但是那些不可恢复。如果您触发其中之一,程序执行将停止。这就是为什么对于致命的错误,应该使用例外。这样,您可以更好地控制程序的流程:
// Example (pseudo-code for db queries):$db->query('START TRANSACTION');try { while ($row = gather_data()) { $db->query('INSERT INTO `table` (`foo`,`bar`) VALUES(?,?)', ...); } $db->query('COMMIT');} catch(Exception $e) { $db->query('ROLLBACK');}
通常使用开发代码中的简单调试的第一种方法。不推荐用于生产环境。最好的方法是抛出一个异常throw new Exception(),你可以在程序的其他部分捕获try并执行一些错误处理。
这三种风格不是互相替代。第一个不是一个错误,但只是一种方法来停止脚本并输出一些调试信息供您手动解析。第二个不是一个错误本身,但如果你没有抓住(try catch)它会被转换成一个错误。最后一个是触发PHP引擎中的一个真正的错误,它将根据您的PHP环境的配置(在某些情况下显示给用户,在其他情况下,仅记录到文件或根本不保存)来处理。
- PHP错误处理:die()Vs trigger_error()Vs throw异常
- PHP 的异常处理、错误处理:error_reporting,try-catch,trigger_error,set_error_handler,set_exception_handler,regis
- PHP中的错误处理set_error_handler()与trigger_error()的问题
- php 异常处理 throw catch
- vs错误之(-)
- php 错误处理函数 die() exit()
- VS 错误处理
- PHP5的异常处理机制[3]--PHP5之前的错误处理之trigger_error()
- PHP5的异常处理机制[2]--PHP5之前的错误处理之trigger_error()
- php throw new Exception php异常处理
- php异常处理--try,throw,catch
- php try,catch,throw异常处理
- php 的错误与异常处理(一)错误处理
- vs编译错误(一)
- VS错误总结(部分)
- php-高级(错误处理和异常处理)
- 【CTSC1999】 CODE[VS] 2218 补丁VS错误(状压最短路)
- C++ try catch() throw 异常处理(一)
- 40亿个整数,求上中位数
- 插入排序
- 聚能聊 | 人工智能技术百问——机器真的能取代人类吗
- 复制构造函数在什么情况下被调用
- 算法基础:排序(一)——选择排序、插入排序、Shell排序——Python实现
- PHP错误处理:die()Vs trigger_error()Vs throw异常
- Zxing 生成二维码嵌套logo,并输出到浏览器
- sql 获取24小时列表
- 电商订单技术方案梳理-续
- android与js 的简单交互
- 天天学到夜里12点,感觉越学越迷茫,怎么办?
- Android 面试题 插件化技术学习
- [Weblogic]如何清理缓存
- C++11 std::thread线程的多种使用方法介绍