2012-08-31 73 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