在PHP中使用break并继续是好的做法吗?

时间:2010-02-23 00:10:09

标签: php

在PHP中使用breakcontinue作为循环的哨兵是一种好习惯吗?

e.g。

if (!empty($var))
    break;

8 个答案:

答案 0 :(得分:4)

do {
 if (condition1)
   break;
 some code;
 some code;
 if (condition2)
   break;
 some code;
 some code;
 if (condition3)
   break;
 some code;
 some code;
} while (false);

VS。

if (!condition1) {
   some code; 
   some code;
   if (!condition2) {
      some code;
      some code;
      if (!condition3) {
         some code;
         some code;
      }
}

有些人发现第一个版本是一个不合适的,很难阅读并喜欢第二个版本。有些人发现第一个版本更干净,更容易阅读。随着条件数量的增加,我倾向于发现第一个版本更容易遵循,因为第二个版本往往越来越难以遵循嵌套级别。此外,如果if (condition) break;变得像if (condition) {some code; break}那样稍微复杂一些,那么与等效嵌套ifs相比,do {if .. break; if .. break..;} while(false)模式会变得更加清晰。

答案 1 :(得分:1)

在轻量级使用中它是可以的,但在大量使用它会使你的代码意大利面。 breakcontinue基本上只是受限goto,因此请谨慎使用。

答案 2 :(得分:1)

绝对是,它们都是有效的编程结构。

新推出的GOTO不是一个好主意。 (请告诉我这是一个愚人节的笑话,我没有看到关于它的说明!)

答案 3 :(得分:1)

使用breakcontinue是完全正确的,只要它有助于使代码更易于阅读和理解。我个人很少使用它们,只有当我不能轻易使用其他结构时。

对于大多数while语句,通过使用布尔变量作为循环的条件,更容易实现与breakcontinue相同的结果首先,然后在循环内修改其值。

另一方面,在我看来,break的最佳用例是在使用for或{{1}迭代数组或类似内容时节省资源阻止并且只对处理元素感兴趣,直到达到某个项目。通过在到达此元素后使用foreach,可以通过断开循环而不超过剩余元素来节省处理能力。这使得代码更有效率,而不会使其不太清晰。

当然,在没有break的情况下使用switch语句几乎是不可能的。

另一个例外是如果你需要控制嵌套结构,在这种情况下,有时使用breakbreak n比同时操作多个变量更简单。 (尽管这个用例可能是最具争议的......)

答案 4 :(得分:0)

让我回答几个问题:

  • 为什么不将它视为良好做法?

  • 是否会降低代码的可读性?

  • 是否会减慢你的周期?

答案 5 :(得分:0)

在Python中,我们使用无限循环和break来提高可读性。所以,是的,你可以使用它,只要你做得正确,并且有充分的理由。

答案 6 :(得分:0)

有关PHP中的break和continue的讨论(以及一般的循环),请查看Advanced loops - 您会得到一个印象,即作者可以设法吞下break并继续但不会中断并继续ñ。 : - )

答案 7 :(得分:0)

在5年以上的PHP编程中,我从来不必在switch语句之外使用break。

继续有时用于跳过迭代中的第一个或最后一个项目,但我不太喜欢它。

他们为什么重新引入GOTO?这是一个耻辱

要回答这个问题,请

if (!empty($var))
    break;

为什么不使用return(如果在方法上下文中)

if (!empty($var))
    return false;

我认为这种方式非常明确,并使调用者意识到内部发生的事情。更好地利用参数错误就是使用异常,它会在执行中将执行中断引发它们。