展开函数以返回错误

时间:2012-08-31 17:01:06

标签: php error-handling

我有一个函数,由于许多原因返回false。是否有可能在不破坏依赖于其为真或假的其他代码的情况下使其产生可捕获的错误?

或者我是否必须返回数组或返回错误原因并且仅在成功时才为真?

对此最好的方法是什么?

基于丹尼尔方法的一些想法:

__ FUNCTION__应返回函数名称

$errors = array();
function someFunction(){
    if(ErrorTWOhappened()){
        global $errors[__FUNCTION__] = "ERRORtwo";
        return false;
    }
    if(someOtherError()){
        global $errors[__FUNCTION__] = "someOtherError";
        return false;
    }
    return true;
}
if(!someFunction())echo $errors['someFunction'];

1 个答案:

答案 0 :(得分:1)

为了不破坏向后兼容性而是提供更多信息,您可以创建第二个函数来记录错误消息。在程序方法中,这可能是这样的:

$myFunctionErrors = array();
function myFunctionSetError($error) {
    global $myFunctionErrors;
    $myFunctionsErrors[] = $error;
}

function myFunctionGetErrors() {
    global $myFunctionErrors;
    return $myFunctionErrors;
}

只需在现有功能中调用myFunctionSetError('whatever');即可。 注意myFunction只是一个前缀,在真实函数之后命名。

另请注意:您显然可以直接使用该数组。但是,为了更好的可维护性,我建议您使用稍后可以修改的功能来轻松更改其背后的逻辑。

如果您更喜欢面向对象的方法,您还可以为此设置一个类,并防止对全局$myFunctionErrors变量产生可能的副作用。

class MyFunctionErrorLogger
{
    protected static $errors = array();

    public function setError($error)
    {
        self::$errors[] = $error;
    }

    public static function getErrors()
    {
        return self::$errors;
    }
}

或者,如果您更喜欢“黑客”方式,请稍微扩展一下这个功能。通过添加另一个具有false默认值的函数参数。旧函数调用不会受此影响,但您可以在将来的调用中提供此额外参数。

function myFunction($myParam, ..., $errorsAsException = false)
{
    // ...
    // Ooops, error case
    if ($errorAsException)
        throw new WhatEverException('errormsg');
    else
        return false;
    // ...
}