0

我有一个由于多种原因返回 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'];
4

1 回答 1

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;
    // ...
}
于 2012-08-31T17:05:49.450 回答