在PHP中使用break和continue是否是一种好的做法?

在PHP中使用break和continue是否是一种好的做法?

问题描述:

是不是很好的做法是使用break并继续作为PHP中循环的标记?在PHP中使用break和continue是否是一种好的做法?

例如

if (!empty($var)) 
    break; 
+1

是的。这些陈述是有原因的。 – zneak 2010-02-23 00:11:32

让我有几个问题回答:

  • 为什么不应该它被认为是好的做法呢?

  • 它会降低代码的可读性吗?

  • 它会减慢你的周期吗?

在光线使用方面,它可以,但在使用量很大的情况下,它会让您的代码通心粉。 breakcontinue基本上只是一个受限制的goto,因此,谨慎使用。

+1

除了goto的事实,你永远不知道它是向后还是向前跳。随着休息和继续,你知道它跳到哪里 – jab 2010-03-22 11:17:01

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

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

+0

PHP有'goto' !!? – Earlz 2010-02-23 00:15:09

+5

当php.net页面包含XKCD漫画时,你真的很想知道 – Erik 2010-02-23 00:21:52

+0

是的。我的意思是,当编程语言已经具有不专业的形象时,你需要什么?你添加* goto *。啧。 – 2010-02-23 00:21:58

在Python中,我们使用无限循环和break来提高可读性。所以,是的,你可以使用它,只要你做得对,并有一个很好的理由。

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

一些人找到的第一个版本的abhomination和难以阅读和爱的第二个版本。有些人发现第一个版本更清洁,更容易阅读。随着条件数量的增加,我倾向于发现第一个版本更容易遵循,因为第二个版本越来越难以遵循嵌套层次。另外,如果if (condition) break;进入只有更复杂的东西,如if (condition) {some code; break}do {if .. break; if .. break..;} while(false)模式与同等嵌套ifs相比更加清晰。

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

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

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

他们为什么再次引入GOTO?这是一个耻辱

要回答这个问题,在

if (!empty($var)) 
    break; 

为什么(在方法方面如果)不使用回

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

我觉得这种方式多清晰,使得来电者知道里面发生了什么。对于参数错误更好的使用方法是使用Excecptions,这可以在执行时突破它们提出的要点。

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

在大多数while语句的情况下,很容易通过使用布尔变量作为用于在第一位置的循环中的条件,然后改变其在循环内的值以达到相同的结果作为breakcontinue

在另一方面,最好的用例为break,在我看来,是节约,如果你是通过一个数组或一个forforeach块类似的迭代,并仅在处理元件兴趣,直到一些资源项目已到达。通过在到达此元素后使用break,可以通过跳出循环来节省处理能力,而无需通过其余元素。这使得代码更加高效,而不会使其不易读取。

当然,如果没有break,则使用switch语句实际上是不可能的。

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