2013-10-28 36 views
3

我使用switch語句$ _POST方法和我的腳本正常運行,但我認爲我的代碼是不正確的。

這裏是我的代碼:

<?php 

switch(isset($_POST)) 
{ 
    case isset($_POST['A']): 
     //do something 
    break; 
    case isset($_POST['B']): 
     //do something 
    break; 
    case isset($_POST['C']): 
     //do something 
    break; 
} 

?> 

腳本運行正常,但我想我的switch語句不GOOD不夠。有沒有更簡單的方法或BETTER使用方法開關聲明和$ _POST方法?

+2

Isset返回true或false,你應該使用if/elseif語句。 –

+0

使用'switch(true)'應該做你以後的事情。 –

+0

聲明很好! +1 – hek2mgl

回答

3

也許你的意思是類似的東西?

<?php 

if(isset($_POST['A'])){ 
// do something 
} 
if(isset($_POST['B'])){ 
// do something 
} 
if(isset($_POST['C'])){ 
// do something 
} 

?> 

(此執行所有不同的匹配分支,而不是隻有第一個的,非第一節if的變化對elseif如果你想只執行第一個匹配的分支。)

+0

這裏有一個區別:如果全部設置了3,那麼每個人都會運行「do something」,與使用break的OP代碼不同。 –

+0

我認爲「某些東西」是不同的。 –

+0

我的意思是你需要'elseif'來獲得與OP代碼相同的功能。 –

5

這太可怕了,但我喜歡這個比的if-else邪惡鏈:

switch(true) 
{ 
    case isset($_POST['A']): 
     //do something 
    break; 
    case isset($_POST['B']): 
     //do something 
    break; 
    case isset($_POST['C']): 
     //do something 
    break; 
} 
+0

if-else-evil?你在說什麼?是啊'開關(真)'是非常愚蠢的。 –

+0

@WesleyMurch查看我的評論下面的問題 – hek2mgl

+0

@ hek2mgl是的,我不同意。我根本沒有得到「邪惡」的東西。代碼清晰度是目標?或者是其他東西?對我來說,這很明顯,這是一個意見問題。 –

2

把一個switch(){ case: }方法的一個好方法是:

if (condition){ 
    // Do Something  
}elseif(condition){ 
    // Do Something 
}elseif(condition){ 
    // Do Something  
} 

這條鏈是慘不忍睹的事,但我會建議使用在你的獨特的案例,alternativley你可以用@跛了,鴨子回答去,但是這是我個人推薦使用

+0

稍微改進了格式,這對我來說似乎是最清晰,最可讀的方式。這也是最少量的代碼。 –

2

檢查了這一點;)


if (!empty($_POST)) { 

     switch ($_POST) { 
     case $_POST['A']: 
      #do something; 
      break; 
     case $_POST['B']: 
      #do something; 
      break; 
     case $_POST['C']: 
      #do something; 
      break; 
    } 
}