这是一个基本的逻辑问题:我有一个函数,如果所有方法/查询都返回true ,则返回 true。但是,使用这种方法,当最后一个foreach调用返回true时,整个函数可以返回true - 如何防止这种情况?
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;
}
答案 0 :(得分: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时立即退出函数,你可以这样做:
if (!deleteOne()) return false;
if (!deleteTwo()) return false;
foreach($params as $p){
if (!deleteThree($p)) return false;
if (!deleteFour($p)) return false;
}
return true;