【问题标题】:Handling Application level Errors in PHP处理 PHP 中的应用程序级错误
【发布时间】:2012-04-01 17:12:23
【问题描述】:

我想知道是否有人可以向我展示一种在我的 PHP 应用程序中处理错误的好方法,我也可以轻松地在我的其他脚本中重用它。

到目前为止,我一直在使用以下功能:

内联错误

function display_errors_for($fieldname) {
    global $errors;

    if (isset($errors[$fieldname]))
    {
        return '<label for="' .$fieldname. '" class="error">' . ucfirst($errors[$fieldname]). '</label>';
    } else {
        return false;
    }
}

所有错误

function display_all_errors($showCounter = true) {
    global $errors;

    $counter = 0;
    foreach ($errors as $errorFieldName => $errorText)
    {
        if ($showCounter == true)
        {
            $counter++;
            echo '<li>' . $counter . ' - <label for="' .$errorFieldName. '">' .$errorText. '</label></li>';
        } else {
            echo '<li><label for="' .$errorFieldName. '">' .$errorText. '</label></li>';
        }
    }
}

我有一个 $errors = array();在我的全局文件顶部定义,因此它被附加到所有文件中。

我使用它的方式是,如果遇到错误,我会将新的错误键/值推送到 $errors 数组持有者,如下所示:

if (strlen($username) < 3) {
    $errors['username'] = "usernames cannot be less then 3 characters.";
}

这一切都很好,但我想知道是否有人对此有更好的方法?上课?我不认为我想将异常与 try/catch 一起使用对我来说似乎是一种矫枉过正

我正计划制作一个新的应用程序,我将大量使用 OOP,虽然我已经使用 OOP 制作了应用程序,但这次我计划更深入并更多地使用 OOP 方法广泛。

我想到的是这样的,虽然它只是一个基本类,但随着我在我的应用程序中越来越深入地了解它需要什么,我会向它添加更多细节。

class Errors
{
    public $errors = array();

    public function __construct()
    {
        // Initialize Default Values

        // Initialize Methods
    }

    public function __destruct()
    {
        //nothing here too...
    }

    public function add($errorField, $errorDesc)
    {
        if (!is_string($errorField)) return false;
        if (!is_string($errorDesc)) return false;
        $this->errors[$errorField] = $errorDesc;
    }
    public function display($errorsArray)
    {
        // code to iterate through the array and display all errors.
    }
}

如果这是创建可重用类来存储和显示整个应用程序错误的好方法,或者更熟悉异常并尝试/捕获我唯一的选择,请分享您的想法?

【问题讨论】:

  • 异常并不复杂,您应该熟悉它们 - 最终,它们很可能会简化您的代码。

标签: php oop class error-handling


【解决方案1】:

我无法想象为什么要创建一个独特的类来完成像在浏览器中回显多个文本字符串这样的微不足道的任务
或者我错过了什么。

我什至认为该功能没有意义。

我个人在我的模板中(我需要它的地方)有这样的代码块

<? if ($data['errors']): ?>
<div class="errors">
  <ul>
<?   foreach ($data['errors'] as $e): ?>
    <li><?=$e?></li>
<?   endforeach ?>
  </ul>
</div>
<? endif ?>

觉得够用了

【讨论】:

    【解决方案2】:

    如果你喜欢 OOP,你应该使用 Zend Framework 之类的框架。在 ZF 中,有一个用于处理一般错误/结果消息的操作助手:FlashMessenger

    http://framework.zend.com/manual/en/zend.controller.actionhelpers.html#zend.controller.actionhelpers.flashmessenger

    【讨论】:

    • flashMessenger 对我来说不是一种处理错误的方法,而只是一个操作助手,允许您在使用 $_SESSION 请求之间保留消息。
    • 实际上@Zubair1 要求的并不是真正的错误处理,而是验证$errors['username'] = "usernames cannot be less then 3 characters.";
    • 根据您发送的链接,它不是我要找的。它只是展示了一种使用会话将消息从一个页面传输到另一个页面的方法。 The FlashMessenger helper allows you to pass messages that the user may need to see on the next request.
    猜你喜欢
    • 1970-01-01
    • 2017-07-07
    • 2013-12-17
    • 2013-01-09
    • 2018-12-13
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多