php - 区分 PHP 错误和应用程序错误

标签 php error-handling try-catch

我正在开发一个应用程序,但出现了一个问题。我正在考虑让 PHP 错误放在一边(它们将登录到数据库或文件中)并管理其他错误(例如“您的用户名无效”或“您输入了错误的密码”或“图像无法被加载”)使用著名的 try-catch 方法。只用try-catch就可以完全管理这种错误好吗?

最佳答案

异常的主要优点是它的“petite mort”行为,即 try{} block 内的本地 die(),阻止进一步的代码执行。

虽然它在处理应用程序错误方面非常方便,但在处理验证用户输入时却变得不太好。如果用户在填写表单时犯了 3 个错误,最好一次性显示全部错误,而不是一个接一个地显示。

您更需要 POST/Redirect/GET 模式来处理用户错误:

<?  
if ($_SERVER['REQUEST_METHOD']=='POST') {  

  $err = array();
  //performing all validations and raising corresponding errors
  if (empty($_POST['name']) $err[] = "Username field is required";  
  if (empty($_POST['text']) $err[] = "Comments field is required";  

  if (!$err) {  
    //if no errors - saving data and redirect
    header("Location: ".$_SERVER['PHP_SELF']);
    exit;
  }  else {
    // all field values should be escaped according to HTML standard
    foreach ($_POST as $key => $val) {
      $form[$key] = htmlspecialchars($val);
    }
} else {
  $form['name'] = $form['comments'] = '';  
}
include 'form.tpl.php';
?>  

关于php - 区分 PHP 错误和应用程序错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5152223/

相关文章:

php - 更新数据库中的外键以在 PHP 中注册用户日志

asp.net-mvc - 显示自定义错误页面并显示异常详细信息

shell - 如何在shell函数中获得 "set -e"的效果和用处?

PHP - 如何捕获 'Trying to get property of non-object' 错误

应该从 asyncio.wait 中出错并被 try 子句捕获的 Python 代码没有被捕获

php - 非阻塞函数 PHP

php - 通过 Ratchet\ReactPHP 发送 Action 的状态更新

PHP/JavaScript 动态改变图片路径

python - 处理 python 中的错误

java - 在Java中,如果捕获并重新抛出一般异常,外部方法是否仍然能够捕获特定异常?