2011-05-02 68 views
7

说我有这样的事情:跳转到PHP中switch语句另一种情况

switch ($_GET['func']) { 
    case 'foo': 
     dobar(); 
     break; 
    case 'orange': 
     if ($_GET['aubergine'] == 'catdog') { 
      // **DO DEFAULT OPTION** 
     } else { 
      dosomethingElse(); 
     } 
     break; 
    default: 
     doDefault(); 
} 

我如何能跳到default情况下从case 'orange'标记位置?

+1

为什么你不能只调用'doDefault()'? – Hammerite 2011-05-02 15:44:30

+1

我真的嘲笑'$ _GET ['aubergine'] =='catdog''。这是你在那里进行的一些精彩的命名。 – 2015-11-04 22:03:26

回答

9

尝试:

switch($_GET['func']) { 
    case 'foo': 
    dobar(); 
    break; 

    case 'orange': 
    if($_GET['aubergine'] != 'catdog') { 
     dosomethingElse(); 
     break; 
    } 

    default: 
    doDefault(); 
} 
+0

是的,这就是我想到的:)干杯 – felamaslen 2011-05-02 15:44:19

+0

谢谢你的回答,这就是我正在寻找的东西,并阻止我不必发表一个问题。谢谢!非常感谢。 – Chezshire 2014-01-02 19:48:07

+1

有时我会做同样的事情。当我这样做时,我通常会在案例中断处添加一个“// Fallthrough”注释,因此我(和其他人在查看代码)可以知道这是有意完成的,而不仅仅是意外的失败。 – OMA 2014-01-21 18:50:59

9

哟耶,你可以使用一个很酷的新功能叫做goto

<?php 
$func = "orange"; 
function doDefault() { echo "yeehaw!"; return; } 
function dobar() { return; } 
function dosomethingElse() { return; } 

switch ($func) { 
    case 'foo': 
     dobar(); 
     break; 
    case 'orange': 
     if (true) { 
      goto defaultlabel; 
     } else { 
      dosomethingElse(); 
     } 
     break; 
    default: 
    defaultlabel: 
     doDefault(); 
} 
+1

你可以但很多程序员会喊一些关于编写意大利面代码的东西:p P.S:Upvoted for“Yo dawg”。 – 2012-07-04 11:08:51

+0

相当,我记得第一次我不得不忘记goto命令。我不想再去那里! 我认为这里的主要问题是SWITCH的工作原理。在我看来,你应该能够简单地省略休息时间,然后默认会运行。但是,PHP会在成功案例后执行每个命令,即使在另一种情况下也是如此。对我来说这很奇怪。 – Puzbie 2013-06-17 10:30:05

+0

@Puzbie发生这种情况是因为'switch'语句尽管与'if'有相似的用法,它基本上是一个方便的goto运算符构造形式的包装。虽然它的'标签'('case XX:')不是'goto'的标签,我们**不能**使用'goto'跳转到开关盒。 – user7808407 2017-10-25 11:32:54