- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
关于 PHP 中的错误处理——据我所知有 3 种样式:
die()
或 exit()
样式:
$con = mysql_connect("localhost","root","password");
if (!$con) {
die('Could not connect: ' . mysql_error());
}
抛出异常
风格:
if (!function_exists('curl_init')) {
throw new Exception('need the CURL PHP extension.
Recomplie PHP with curl');
}
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 个替代品是否可以相互替换,因此可以互换使用?
有点 OT:是我还是大家认为 PHP 错误处理选项只是 太多 到让 php 开发人员感到困惑的程度?
最佳答案
第一个永远不应该在生产代码中使用,因为它传输的信息与最终用户无关(用户无法对“无法连接到数据库”做任何事情)。
如果您知道在某个关键代码点,您的应用程序可能会失败,并且您希望您的代码能够跨多个调用级别恢复,那么您会抛出异常。
trigger_error()
允许您细粒度的错误报告(通过使用不同级别的错误消息),并且您可以向最终用户隐藏这些错误(使用 set_error_handler()
),但仍然保留它们在测试期间显示给您。
此外,trigger_error()
可以生成在开发过程中重要的非致命消息,可以使用自定义错误处理程序在生产代码中抑制这些消息。您也可以产生 fatal error (E_USER_ERROR
),但这些错误是不可恢复的。如果您触发其中之一,则程序执行停止。这就是为什么对于 fatal 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');
}
这里,如果 gather_data()
只是简单粗暴(使用 E_USER_ERROR
或 die()
)有机会,以前的 INSERT
语句会进入您的数据库,即使不需要,您也无法控制接下来会发生什么。
关于error-handling - PHP 错误处理 : die() Vs trigger_error() Vs throw Exception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7063053/
这是在 MacOS 上通过自制软件安装了 PHP 8.1.10 ... 只是一个空白的 index.php 代码,只有这段代码...... 然后 .. 在我的浏览器中呈现以查看... Fatal
我相信所有这些(甚至是 die() 或 die(0))都是相同的。如果它们不相同,那么哪个更适合成功退出脚本?如果它们相同,是否有任何首选标准表明脚本成功完成?我倾向于使用 exit;. 编辑:所有答
在对项目中一个非常模糊的错误进行了一些认真的调试之后,我能够得到这个简短的代码。一个没有死亡的死亡调用。 该问题仅在调用 script.pl 时发生。如果直接调用Class_A,那么die调用就会成功
注意:我正在使用输出缓冲。它只是包含在 head() 和 foot() 函数中。 我使用以下模板在我当前的 PHP 项目中创建页面: 以下示例是否适合使用 die()?另外,如果有的话,这可能给
我想这样写: die "Error in file $0 line number $line_number_of_this_cmd_in_file \n"; 在我的 perl 脚本文件中。 有什么帮助
下面是我尝试执行的代码 $a=0; if($a==0){die print"zero"}; 我得到如下输出 1 at test.pl line 2 Zero 我想知道首先打印的 1 是什么,
我使用以下代码在 perl 中运行一个简单的文件测试: my $f1 = "$pre_file"; unless (-e $1) { print "\n Pre_check file does n
我目前正在制作一个注册页面。它包括密码散列和验证。当我使用“die”时,它会停止表单并显示错误。我想在同一页面上显示错误。 $_POST['username'] ); try
我总是在发出 die() 命令之前调用 mysqli_close()。 这很乏味,有时会被遗忘,但我想确定 die 命令是关闭所有 mysql 连接还是仍然保持打开状态? 我无法通过 PHP 检查,因
让 die() 存在于生产环境中是否被认为是不好的做法?刚好看到这篇文章http://www.phpfreaks.com/blog/or-die-must-die作者抨击在生产环境中使用这种东西的人。
当我刚开始学习 PHP 时,我会编写类似于这里的查询语句: mysql_query("SELECT * FROM `table`") or die(mysql_error()); 目前最好的方法是什么
有没有人在 Python 中使用类似的东西: def die(error_message): raise Exception(error_message) ... check_somethin
我正在使用以下行进行一个简单的系统调用,该调用有效: system ("mkdir -p Purged") or die "Failed to mkdir." ; 执行脚本确实会进行系统调用,我可以找
我有一个通过 die 引发异常的脚本.当我捕捉到异常时,我想输出没有附加位置信息的消息。 这个脚本: #! /usr/bin/perl -w use strict; eval { die "M
在Perl中,如果程序因错误退出,则可以编写$SIG{__DIE__}处理程序来执行代码。 bash是否提供类似的功能? 这是我要尝试的操作:我有一个bash脚本,该脚本创建一个新目录并调用几个命令,
自从我创建 HTA 代码以来,我一直使用 IE :( 我们需要将更改事件捕获在 中元素,但你猜怎么着,IE 不支持该事件。 所以我创造了一种模仿它的方法。与 单击时显示 略低于。那部分工作正常。问题
this => set_time_limit (), Die() 可以用来取消文件上传吗。 即当用户单击按钮时,set_time_limit () 函数将执行。 它会停止上传吗? 最佳答案 您最好使用
我正在开发一些项目。我想控制不同的错误。我知道在所有流行的框架和 php 项目中都有不同的异常。但我认为这不是必需的工作。如果发生错误,我们可以用我们的消息制作 die()。1. Exceptions
最近我参加了 Jeffrey Richter 的有关 .NET 的培训类(class)。他提到了一种编码策略“死亡很棒”。也就是说,即使在程序或事件循环的根部也不要编写“catch (Exceptio
假设我们的类中有以下代码: //class code TextBox t = new TextBox(); ListBox l = new ListBox(); 我们有两种可能的情况: 首先,我们将
我是一名优秀的程序员,十分优秀!