PHP语句切换案例礼仪

时间:2012-11-20 16:41:00

标签: php switch-statement

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” - Marc B

    我的评论:很棒的理由Marc!那是礼仪的祸..如果 你打破了它,人们还没有准备好被船长哄骗 正确性。

  2. 答案: @JamesT:您所读到的内容只是警告您忘记它 错误地,因为这是一个非常常见的编程错误。你可以做 它是否有意。 - Madara Uchiha

    我的评论:我认为礼仪赢得了这个问题。放 因为下一个人编辑可能会让人感到困惑而中断 你的代码;如果你足够明智地发表评论,那就去做吧 解释你的意思是错过它

  3. 答案:你很想念他们的情绪。他们谈论的是在每个案例都有个别行动时省略休息,例如我的第一个例子。如果案例中的操作完全共享,那么对案例(例如我的第4章和第5章)进行分组就完全没问题了。 - Rawkode

    我的评论:我同意这句话可能会被误读。我认为除了让未来的开发人员混淆之外没有任何理由可以质疑你是否做了或不打算离开。

2 个答案:

答案 0 :(得分:1)

嗯,你的第一个例子可能不会按照你期望的方式行事。

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

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

使用开关盒时,您显示的第二种方法更好。


break语句用于在满足后退出案例。您可以将其保留,并执行所有后续案例。 如果这是预期的行为,那就很好地实现它。不要忘记添加注释来澄清它。善待你的未来!

答案 1 :(得分:0)

以下开关与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)的示例 - 这会导致语法错误。