打破; vs继续; vs return;

时间:2011-12-23 14:24:45

标签: php loops

我从hotscripts.com

下载了一个用PHP编写的免费通讯

我更新了一些代码以添加新功能,我看到了一些我不理解的东西。

在我看到的代码中:

foreach() { ...
 if() ...
  break;
 elseif() ...
  continue;
}

我也看到了:

function() {
// ...
for($nl = 0; ...
 if() ...
  return true;
}

我读到break;将停止循环,continue将跳过循环到下一次迭代,return将退出该函数。

我不明白为什么编码那种风格?为什么不使用类似的东西:

function() {
// ...
 for($nl = 0; ...
  if() ...
   $returnValue = true;
  else {
   $returnValue = false;
  }
 }
 return $returnValue;
}

或for循环中的相同想法?

3 个答案:

答案 0 :(得分:34)

使用breakcontinue等关键字可以使代码比您的建议更容易阅读。

特别是如果你将if / else-statements嵌套在一个以上的级别。

在这篇文章中进一步比较片段,哪一个更容易阅读? 它们都输出完全相同的内容,而$Aarray (1,2,4,4,3,4)

循环中的return(函数内部)可以节省宝贵的CPU周期,如果你知道你不需要再循环,为什么呢?


我太酷了,无法使用break / continue ..

$not_even_found = false;

foreach ($A as $v) {
  if ($v != 1) {
    if ($not_even_found) {
    } else if ($v % 2 != 0) {
      $not_even_found = true;
    } else {
      echo "$v\n";
    }
  }
}

我希望有可读代码..

foreach ($A as $v) {
  if ($v == 1)
    continue;

  if ($v % 2 != 0)
    break;

  echo "$v\n";
}

答案 1 :(得分:12)

您使用该样式编码,以便在第一次满足条件时保存不必要的循环,然后您现在已经确定某些内容,并且您不需要进一步调查。

事实上,如果你回来,你就停止了循环。一个愚蠢的例子

function in_array($needle, $haystack){
   for($i = 0; $i < count($haystack); i++){
      if($needle === $haystack[$i]{
          return $i;
      }
   }
   return -1;
}

在这种情况下,当满足条件时,你返回一些东西(true,或者在这种情况下是计数器的值),因为你不需要在整个数组上使用iterato

答案 2 :(得分:0)

一些“为什么”归结为个人偏好。其中一些归结为在返回之前是否需要在同一个函数中完成其他事情。如果没有其他事情需要做,并且该函数只是假设返回一个真或假的答案,那么直接使用return true;是最方便的机制。如果你仍然需要做一些其他的东西,即使在决定是否返回true之后(例如关闭文件句柄),然后将响应分配给变量然后在结束时返回它可能是必要的。