2014-07-26 156 views
0

這是一個基本邏輯問題:如果所有方法/查詢都返回true,我有一個函數返回。然而,在這裏使用這種方法時,當最後的foreach調用返回true時,整個函數可以返回true - 我如何防止這種情況發生?如果一個函數在函數中返回false,則返回false

function deleteAllSuccess(){ 
    $all_query_ok = true; 
    $params = array('A', 'B', 'C'); 

    deleteOne() ? null : $all_query_ok = false; 
    deleteTwo() ? null : $all_query_ok = false; 

    foreach($params as $p){ 
     $all_query_ok = deleteThree($p); 
     $all_query_ok = deleteFour($p); 
    } 

    if($all_query_ok){ 
     commit(); 
     return true; 
    }else{ 
     rollback(); 
     return false; 
} 
+1

最好的辦法是火'返回FALSE'當你得到第一個'FALSE'不要去功能結束...... –

回答

2

簡單的解決辦法是使用& operator如果你想每一個函數來執行(或&& operator用於短路):

foreach($params as $p){ 
    $all_query_ok = $all_query_ok & deleteThree($p); 
    $all_query_ok = $all_query_ok & deleteFour($p); 
} 

return $all_query_ok; 

或爲簡便起見,你可以使用&=複合賦值運算符:

foreach($params as $p){ 
    $all_query_ok &= deleteThree($p); 
    $all_query_ok &= deleteFour($p); 
} 

但是,如果您希望一旦任何函數返回false就立即退出函數,則yo ü可以做這樣的事情:

if (!deleteOne()) return false; 
if (!deleteTwo()) return false; 

foreach($params as $p){ 
    if (!deleteThree($p)) return false; 
    if (!deleteFour($p)) return false; 
} 

return true; 
+0

第一個套裝因爲如果失敗,我需要回滾,所以我不能只在第一次失敗時返回false。 – toefftoefftoeff

+0

@dfdfdf如果你需要每個功能運行,而你只是想收集結果,我意識到我的初始解決方案存在問題。請參閱我更新的答案以獲得更好的解決方案。 –