Php 展开函数以返回错误

Php 展开函数以返回错误,php,error-handling,Php,Error Handling,我有一个返回false的函数,原因很多。也可以让它抛出可捕获的错误而不破坏依赖于它是真是假的其他代码吗 或者我必须返回数组或返回error resasons,并且只有在成功时才返回true 最好的办法是什么 基于Daniel方法的一些想法: __函数应返回函数名 $errors = array(); function someFunction(){ if(ErrorTWOhappened()){ global $errors[__FUNCTION__] = "ERRORt

我有一个返回false的函数,原因很多。也可以让它抛出可捕获的错误而不破坏依赖于它是真是假的其他代码吗

或者我必须返回数组或返回error resasons,并且只有在成功时才返回true

最好的办法是什么

基于Daniel方法的一些想法:

__函数应返回函数名

$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'];

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

$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;
    // ...
}

是否没有官方的方法来制作如下内容:
return:false;抛出“错误密码”
。您的解决方案应该可以正常工作,但我希望有一种“黑客”较少的方法;)不,没有。一旦返回值,函数代码的执行就会停止。一旦抛出异常,执行也会停止。抛出异常是否总是被视为false?刚才看到了一些“改进”解决方案的其他想法。我会把它添加到我的问题中,告诉我,你的想法。我已经根据你的评论编辑了我的答案。一旦抛出异常,就没有返回值。停止代码执行并调用catch块(如果存在)。