2011-05-02 71 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