跳转到PHP switch语句中的另一个case

跳转到PHP switch语句中的另一个case,php,switch-statement,Php,Switch Statement,假设我有这样的东西: switch ($_GET['func']) { case 'foo': dobar(); break; case 'orange': if ($_GET['aubergine'] == 'catdog') { // **DO DEFAULT OPTION** } else { dosomethingElse(); }

假设我有这样的东西:

switch ($_GET['func']) {
    case 'foo':
        dobar();
        break;
    case 'orange':
        if ($_GET['aubergine'] == 'catdog') {
            // **DO DEFAULT OPTION**
        } else {
            dosomethingElse();
        }
        break;
    default:
        doDefault();
}
如何从
案例“橙色”
中的标记点跳转到
默认案例?

尝试:

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

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

  default:
    doDefault();
}

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


为什么你不能直接调用
doDefault()
?我真的嘲笑
$\u GET['aubergine']=='catdog'
。这是一个很好的命名。你可以,但是很多程序员都会对编写意大利面代码大喊大叫:p.p.s:Up投票支持“Yo dawg”。没错,我记得我第一次不得不放弃goto命令。我不想再去那里了!我认为这里的主要问题是开关实际上是如何工作的。在我看来,您应该能够简单地忽略中断,然后缺省值就会运行。然而,PHP将在一个成功案例后执行每个命令,即使它在另一个案例中。这对我来说很奇怪。@Puzbie发生这种情况是因为
switch
语句尽管与
if
有类似的用法,但它基本上是一种方便的
goto
运算符构造形式的包装器。虽然它的“标签”(
case XX:
)与
goto
的标签不同,而且我们不能使用
goto
跳转切换案例。感谢您的回答,这正是我一直在寻找的,并使我不必发布问题。谢谢非常感谢。我有时也做同样的事情。当我这样做的时候,我通常会在案例中断应该出现的地方添加一个“//Fallthrough”注释,这样我(和其他查看代码的人)就可以知道这是故意的,而不仅仅是一次意外的中断。
<?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();
}