在PHP中使用break和continue是一个好的实践吗?

4

在PHP中,使用breakcontinue作为循环的哨兵是一种好的实践吗?

例如:

if (!empty($var))
    break;

1
是的,没错。这些陈述存在是有原因的。 - zneak
8个回答

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);

对比。

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},则与等效的嵌套if相比,do {if .. break; if .. break..;} while(false)模式会变得更加清晰。


2
在轻度使用时,它还可以,但在重度使用时会使您的代码变得混乱。 breakcontinue 基本上只是受限制的goto,因此请谨慎使用。

1
除了goto语句,你永远不知道它是向前还是向后跳转。而使用break和continue语句,你可以清楚地知道它跳转的位置。 - jab

1

没错,它们都是有效的编程结构。

不过,新引入的GOTO并不是一个好主意。(请告诉我这只是我没有看到关于愚人节玩笑的说明!)


6
如果php.net页面包含一张XKCD漫画,你真的会想知道为什么。 - Erik
是啊。我的意思是,当一个编程语言本身就有不专业的形象时,你还加goto?真是让人叹为观止。 - Pekka
@Erik 我仍然有点认为这是愚人节玩笑! - Pekka
在php.net上包含XKCD漫画似乎表明您永远不应该使用goto。我也同意,那么为什么他们在5.3中包含了它? - Jeremy C
@Jeremy 我真的不知道。 - Pekka

1
只要使用break或continue有助于使代码更易于阅读和理解,就可以完全正确地使用它们。我个人很少使用它们,只有在不能轻松使用其他结构时才会使用。
在大多数while语句的情况下,通过在循环的第一次使用布尔变量作为循环条件,然后在循环内修改其值,可以更容易地实现与break或continue相同的结果。
另一方面,我认为break的最佳用例是在迭代数组或类似物体并且仅对处理元素感兴趣直到达到某个项目时,可以节省资源。在到达此元素后使用break,可以在不遍历剩余元素的情况下中断循环,从而使代码更有效率而不会降低可读性。
当然,几乎不可能在不使用break的情况下使用switch语句。
另一个例外情况是当您需要控制嵌套结构时,有时使用break ncontinue n比同时操作多个变量更简单。 (尽管这种用例可能是最具争议性的...)

0

让我用几个问题来回答:

  • 为什么不应该被视为良好的实践?

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

  • 它是否会减慢您的循环速度?


0
在Python中,我们使用无限循环和break语句来提高可读性。因此,是的,你可以使用它,前提是你正确地使用它,并且有一个好的理由。

0

关于PHP中的break和continue(以及循环语句),请参阅高级循环 - 你会得到这样的印象,作者似乎刚刚掌握了break和continue,但还没有掌握break n 和 continue n。 :-)


0

在我五年多的 PHP 编程经验中,我从未在 switch 语句之外使用过 break。

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

他们为什么要重新引入 GOTO?这太糟糕了。

回答这个问题,在

if (!empty($var))
    break;

为什么不在方法上下文中使用return?

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

我认为这种方式更清晰,并使调用方了解内部发生了什么。参数错误的更好使用是使用异常,事实上,它们会在引发异常的地方中止执行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接