处理PHP中的应用程序级错误

时间:2012-04-01 17:12:23

标签: php oop class error-handling

我想知道是否有人可以告诉我一个很好的方法来处理我的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.
    }
}

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

2 个答案:

答案 0 :(得分:0)

我无法想象为将几个文本字符串回显到浏览器中创建一个非常简单的类的原因。 或者我错过了一些东西。

我觉得这个功能没有意义。

就我个人而言,我的模板(我需要它)就像这样的代码块

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

并且发现它已经够了

答案 1 :(得分:-1)

如果您使用OOP,则应使用Zend Framework之类的框架。在ZF中,有一个动作助手可以处理一般错误/结果消息: FlashMessenger

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