繁体   English   中英

PHP 语句 switch case 礼仪

[英]PHP statement switch case etiquette

1

switch($app_id){
    case (
        $app_id == 1 || 
        $app_id == 2
    ):
        //do something
    break;
    case 3:
        //do something else
    break;
}

2

switch($app_id){
    case 1:
    case 2: 
        //do something
    break;
    case 3:
        //do something else
    break;
}

除了礼节,有没有更好的理由让你不做第二个,或者完全取决于你?

我问的原因是因为在 php.net 中它说你不应该做后者,无论你是否愿意(来自 php.net 的片段说你不应该在没有中断的情况下做案例,无论你是否想要堆叠查询或不是)

<?php
switch ($i) {
case 0:
    echo "i equals 0";
case 1:
    echo "i equals 1";
case 2:
    echo "i equals 2";
}
?>

在这里,如果 $i 等于 0,PHP 将执行所有的 echo 语句! 如果 $i 等于 1,PHP 将执行最后两个 echo 语句。 只有当 $i 等于 2 时,您才会得到预期的行为(将显示“i 等于 2”)。因此,重要的是不要忘记 break 语句(即使在某些情况下您可能希望避免有意提供它们) )。

到目前为止的原因:

  1. 回答:如果我省略了一个中断以允许一个失败,我会发表评论说发生了一个失败,这样下一个出现的人就不会“啊哈!错过了休息!BOOM” –马克·B

    我的评论:很好的理由马克! 这是礼仪的流浪汉......如果你打破它,人们还没有准备好被他们队长的正确性所欺骗。

  2. 答案: @JamesT:您所阅读的内容只会警告您不要错误地忘记它,因为这是一个非常常见的编程错误。 如果它是有意的,你可以做到。 ——宇智波斑

    我的评论:我认为礼仪胜过这个问题。 一定要打断,因为这可能会让下一个人编辑你的代码感到困惑; 唉,如果你足够明智,可以发表评论来解释你打算错过它,那就去做吧

  3. 回答:你错过了理解他们的情绪。 他们谈论的是在每种情况下都有单独的操作时省略中断,例如我的第一个示例。 对案例进行分组,例如我的示例一中的 4 和 5,如果操作完全跨案例共享,则完全可以并且鼓励。 – 罗科德

    我的评论:我同意这句话可能被误读。 除了让未来的开发人员怀疑您是否有意放弃突破之外,我认为没有任何理由。

好吧,您的第一个示例可能不会按照您期望的方式运行。

switch($app_id){
    case (
        $app_id == 1 || 
        $app_id == 3
    ):
        //do something
    case 3:
        //do something else
    break;
}

这将评估条件并解析为TRUEFALSE值,然后将其与$app_id进行比较。 在这种(非常具体的)情况下,您将获得预期的结果,但这不是正确的做法! .

使用 switch case 时,您展示的第二种方法更好。


break 语句用于在满足后退出案例。 您可以省略它,并执行所有后续案例。 如果这是预期的行为,那么以这种方式实现它是非常好的。 不要忘记添加注释以澄清它。 善待未来的你!

下面的 switch 和if($i == 1 || $i == 2 || $i == 3)

switch($i) {
  case 1:
    echo "1";
  case 2:
    echo "2";
  case 3:
    echo "3";
    break;
}

假设 $i == 1,上面的代码实际上会输出“123”——这通常是不正确的。

正确示例:

if ($i == 1) // Do something
else if ($i == 2) // Do something else, etc

是相同的

switch(i) {
  case 1:
    echo "1";
    break;
  case 2:
    echo "1";
    break;

  case 4:
  case 5:
    echo "This is 4 and 5";
    break;
}

上面的代码只会为 $i == 1 输出 "1"

有些人确实将他们的案例包含在 {} 中,但这纯粹是为了可读性,不会强制中断。

关于您的case (4 || 5) - 这将导致语法错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM