2012-11-20 54 views
0

PHP语句开关罩礼仪

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

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将执行所有的print语句!如果$ i等于1,PHP将执行最后两个回声语句。只有当$ i等于2时,才会得到预期的行为('我等于2')。因此,重要的是不要忘记突破语句(,即使您希望避免在某些情况下故意提供它们情况)。

原因至今:

  1. 回答:如果我忽略中断允许落空,我把一个 评论说,有落空的现象发生,只是这样的 下一个人来一起不走 - 马克乙

    我的评论“啊哈缺少休息BOOM!”:很好的理由马克!那就是礼仪的屁股..如果你打破了它,人们还没有准备好被他们的队长 正确性所吸引。

  2. 答案: @JamesT:你读过什么只发出警告,错误地忘记它 ,因为它是一个非常常见的编程错误。如果有意的话,你可以做 。 - Madara Uchiha

    我的评论:我认为那时礼仪赢得了这个问题。请将 中止,因为它可能会让您的代码编辑 的下一个人感到困惑;唉做,如果你有足够的理智地加入了注释 解释你的意思错过它

  3. 解答:你错过了解他们的情绪。他们正在讨论在每个案例都有单独行动时省略休息时间,比如我的第一个例子。如果将行为完全分享到案例中,将例如我的4和5这样的案例分组就非常好,并且会受到鼓励。 - Rawkode

    我的评论:我同意这句话可能会被误读。我没有看到任何理由,除了让未来的开发人员疑惑你是否确实打算离开。

+2

我不认为你正确地放置你的'break'语句。 – Blazemonger

+0

其实,你根本不应该使用'switch'。 – moonwave99

+0

对不起,请重新提问,我点了问题。抱歉。我修正了它。 – Jimmyt1988

回答

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

上面的代码,只是要输出 “1” $ I == 1

有些人不包含他们的情况在{}之内,但这纯粹是为了可读性,不会强制中断。

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

+0

问题是......你为什么要这样做。不管完全相同的结果。这只是礼仪,像条件声明1 – Jimmyt1988

+0

更新了答案,多一点。例子二,我会说,它是最好的例子。它很干净,很容易准备/关注。 – Rawkode

+0

但php.net指出,你不应该错过休息..所以问题是为什么。从你的陈述中,如果我= 3,那么它会输出“1这是4和5”..如果你想这样的事情发生,你为什么不应该这样做......我想答案是......礼节。 – Jimmyt1988

1

那么,你的第一个例子可能不会像你期望的那样行事。

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

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

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


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

+0

请再次检查问题,我输入错误并纠正错误。我知道语句是如何工作的,我想知道为什么php.net不希望你忽略休息,而不管它是否工作。 – Jimmyt1988

+0

@JamesT:我编辑过。 –

+0

我想知道为什么php.net声明你不应该这样做?奇怪的是,他们把它,然后跟随它的使用示范。也许我会误解陈述 – Jimmyt1988

0

第一构建必须这样写才能工作:

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

哪种作品,但对礼仪

您提到的关于不可忘记的注意事项是关于常见编程错误的警告。绝不鼓励您使用switch声明。