2012-08-31 70 views
0

我有一个返回值的原因有很多假的功能。是否有可能使它在不破坏依赖于它的真或假的其他代码的情况下引发可捕获的错误?展开函数返回错误

否则我将不得不返回数组或返回错误resasons,只有在成功真的吗?

,这是什么最好的形式给出?

根据丹尼尔的做法有些想法:

__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

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

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

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

并调用myFunctionSetError('whatever');现有的函数中。 myFunction仅仅是一个前缀,你真正的功能来给它命名。

还要注意:你可以明显地直接使用数组。然而,为了更好的可维护性,我建议您使用稍后可以修改的函数来轻松更改其背后的逻辑。

如果你喜欢一个面向对象的方法,你还可以设置一类为防止有关全球$myFunctionErrors变量可能产生的副作用。或者,如果您更喜欢“黑客入侵”的方式,请稍微扩展该功能。通过添加另一个功能参数,默认值为false。旧功能调用不受此影响,但您可以在将来的调用中提供此额外参数。

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

有没有官方的方式来做类似:'return:false; throw“wrong password”'。你的解决方案应该可以正常工作,但我希望有一个“被黑”的方式;) – Wurstbro

+0

不,没有。只要您返回值,功能代码的执行就会停止。只要你抛出异常,执行也会停止。 –

+0

引发的异常始终视为false? – Wurstbro