在PHP中使用break
和continue
作为循环的哨兵是一种好习惯吗?
e.g。
if (!empty($var))
break;
答案 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)
在轻量级使用中它是可以的,但在大量使用它会使你的代码意大利面。 break
和continue
基本上只是受限goto
,因此请谨慎使用。
答案 2 :(得分:1)
绝对是,它们都是有效的编程结构。
新推出的GOTO不是一个好主意。 (请告诉我这是一个愚人节的笑话,我没有看到关于它的说明!)
答案 3 :(得分:1)
使用break
或continue
是完全正确的,只要它有助于使代码更易于阅读和理解。我个人很少使用它们,只有当我不能轻易使用其他结构时。
对于大多数while
语句,通过使用布尔变量作为循环的条件,更容易实现与break
或continue
相同的结果首先,然后在循环内修改其值。
另一方面,在我看来,break
的最佳用例是在使用for
或{{1}迭代数组或类似内容时节省资源阻止并且只对处理元素感兴趣,直到达到某个项目。通过在到达此元素后使用foreach
,可以通过断开循环而不超过剩余元素来节省处理能力。这使得代码更有效率,而不会使其不太清晰。
当然,在没有break
的情况下使用switch
语句几乎是不可能的。
另一个例外是如果你需要控制嵌套结构,在这种情况下,有时使用break
或break 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;
我认为这种方式非常明确,并使调用者意识到内部发生的事情。更好地利用参数错误就是使用异常,它会在执行中将执行中断引发它们。