2013-09-23 65 views
0

有什麼方法可以簡化這段代碼,以避免需要跳轉到開關的默認值嗎?PHP開關 - 默認如果變量沒有設置

我有一個HTTP請求不同的認證方法配置表,可選擇不設置默認爲一個普通的http請求的值:

if(!isset($type)) { 
    $type = "default"; 
} 

switch ($type) { 
    case "oauth": 
     #instantinate an oauth class here 
     break; 
    case "http": 
     #instantinate http auth class here 
     break; 
    default: 
     #do an unprotected http request 
     break; 
} 

我有一個功能沒有問題,但我想要一個更乾淨的解決方案來打開一個可選變量,有什麼辦法來實現這一點?謝謝!

+0

請注意,您不需要將其設置爲「default」 - 您可以將該代碼放入函數中,並使用語法函數funcName($ type =「」)將其設置爲「 「如果傳遞一個空值ib。 – andrewb

回答

1

您不需要將變量設置爲「default」。如果未設置變量或與所有其他定義的案例有不同的值,則會執行缺省情況。 但請記住:如果變量沒有設置,並且您在開關中使用它,您將會收到一條通知:「Notice:Undefined variable」。因此,如果您不想禁用通知,則必須檢查變量是否已設置。

+0

我沒有提到我需要避免收到通知,所以似乎沒有辦法繞過它沒有額外的代碼,謝謝。 – kachnitel

0

default情況下是一個包​​羅萬象的,如果沒有以前的病例被發現,所以你的變量是否isset,並在分配給"default"檢查是不必要的。

0

switch語句,默認情況下是指未上市的價值...所以你的$類型=「默認」可以是任何東西......或者什麼都不

僅這應該工作。

switch ($type) { 
    case "oauth": 
     #instantinate an oauth class here 
     break; 
    case "http": 
     #instantinate http auth class here 
     break; 
    default: 
     #do an unprotected http request 
     break; 
} 

還要注意以下錯字

if(!isset($type)) { 
    $type = "default" 
} 

應該

if(!isset($type)) { 
    $type = "default"; 
} 

分號失蹤。

+0

謝謝,修正了分號,但是當我回答edditor時,這會引發一個我必須避免的通知,並且我希望保持它不會使用getter函數或if語句,下次我會更具體。 – kachnitel

0

如果你想簡化它而不會得到通知。請嘗試以下操作:

if(!isset($type)) { 
    #do an unprotected http request 
}else{ 
    switch ($type) { 
     case "oauth": 
      #instantinate an oauth class here 
      break; 
     case "http": 
      #instantinate http auth class here 
      break; 
    } 
} 
相關問題