2014-07-26 5 views
0

Il s'agit d'une question de logique de base: j'ai une fonction qui doit renvoyer true si toutes les méthodes/requêtes retournent la valeur. Cependant, avec cette approche ici, toute la fonction peut retourner vrai lorsque le dernier appel de foreach retourne vrai - comment puis-je empêcher cela?Renvoie la valeur false si un appel renvoie la valeur false dans une fonction

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

La meilleure idée est de tirer 'false' revenir quand vous avez obtenu le premier' false' et ne vont pas à la fin de la fonction ... Les –

Répondre

2

La solution simple serait d'utiliser le & operator si vous voulez que chaque fonction à exécuter (ou && operator pour un court-circuit):

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

return $all_query_ok; 

Ou par souci de concision, vous pouvez utiliser le composé &= opérateur d'affectation:

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

Mais au cas où vous voulez quitter la fonction dès que l'une des fonctions renvoie false, yo u peut faire quelque chose comme ceci:

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

premier procès parce que j'ai besoin d'une restauration si elle échoue, donc je ne peux pas juste retourner faux sur le premier échec. – toefftoefftoeff

+0

@dfdfdf Au cas où vous auriez besoin de toutes les fonctions et que vous vouliez simplement collecter les résultats, j'ai réalisé qu'il y avait un problème avec ma solution initiale. S'il vous plaît voir ma réponse mise à jour pour une meilleure solution. –

Questions connexes