gpt4 book ai didi

php - 如何优雅地死去?

转载 作者:可可西里 更新时间:2023-11-01 13:56:52 24 4
gpt4 key购买 nike

所以我刚刚阅读了 Why to never use 'or die'.

我比以往任何时候都更加困惑。我正在验证一个复杂的表单,我遍历了 if 语句的许多嵌套级别,什么不是,我将一个变量传递给名为 $status 的表单,它只能是“new”或“edit”。然后,当用户再次提交要验证的表单时,表单会将 $status 值作为隐藏字段 ($_POST) 传递。我想确保用户不会意外更改此设置,因此我想在"new"或“编辑”以外的其他内容通过时捕获错误。 (尽管我想在理想世界中完全消除用户影响此变量的可能性。)

所以我想我会在 if 语句中使用 DIE()

<nested ifs>
Select ($status){
Case 'edit':
break;
Case 'new':
break;
default:
//using example from article
trigger_error("An error that should not occur has occurred", E_USER_ERROR);
break;
}
</nested ifs>

我真的不明白这怎么比 die() 更干净?本质上,我想调用另一个函数,该函数向用户显示他们在此时刻可以做什么来修复错误的一些选项,但我希望代码完全停止运行,因为我不希望 if 语句进一步向下继续解析任何东西,并在发现"new"或“编辑”以外的内容时生成错误。

我不确定自己是否清楚,所以请随时让我详细说明任何不清楚的地方。(或者更好的是,隐藏的用户字段会被黑客入侵吗?如何预防?:P)

最佳答案

trigger_error() 触发由错误处理程序处理的错误。

使用trigger_error()您可以优雅地处理错误,例如:

  set_error_handler('ErrorHandler');

function ErrorHandler($errno, $errmsg, $filename, $linenum, $vars)
{
print '<pre style="line-height: 2em;">';
printf("==> Error in `%s' line %s: %s\n\n", $filename, $linenum, $errmsg);
debug_print_backtrace();
print '</pre>';

exit($errno);
}

这是一个简单的例子,但我们公司的网站显示了一个友好的错误页面,并给我发了一封电子邮件,说我是个白痴,搞砸了某处:-)

相对于 die()exit() 的优势应该很明显:-)

exit() 仍然可以在您需要退出时使用。例如,当您生成模板、输出模板并希望代码执行停止时。或者当您发送 header('Location: ...'); header 并希望确保执行停止时...只是不要将其用于处理意外情况(即错误)。

trigger_error() 还可以让您更好地控制。您可以在希望执行停止但显示通知时发送 E_USER_NOTICE,在希望执行停止时发送E_USER_ERROR

此外,您可以编写更复杂的错误处理函数,其中一些 IP 会发现错误,而其他 IP 则不会...对开发很有用。

但是要小心过于复杂的错误处理程序,如果错误发生在错误处理程序中会发生什么......?你可能看过《盗梦空间》:)

关于php - 如何优雅地死去?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5425351/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com