2012-02-13 85 views
6

我調試了客戶的一些代碼,發現語法如下:在PHP switch語句中有效的情況下的分號?

switch ($i) { 
    case 0; 
     echo "i equals 0"; 
     break; 
    case 1; 
     echo "i equals 1"; 
     break; 
    case 2; 
     echo "i equals 2"; 
     break; 
} 

case語句中的分號,而不是冒號結束。原來這是編譯,但它是合法的嗎?我從來沒有見過這種語法。

+1

@LeviMorrison不,你不會的。這裏沒有任何基本的邏輯可以理性地理解;由於某種原因PHP只是在一個案例之後而不是冒號的情況下允許使用分號。相同的語法在C中是錯誤的。 – 2016-01-07 11:53:02

回答

12

documentation

這是可能的情況等之後,而不是使用一個冒號分號:

switch($beer) 
{ 
    case 'tuborg'; 
    case 'carlsberg'; 
    case 'heineken'; 
     echo 'Good choice'; 
    break; 
    default; 
     echo 'Please make a new selection...'; 
    break; 
} 
-2

是啊,只要你將$i擁有一批價值

+0

不,它無論如何都會起作用。 'true' = 1; 'false' = 0; '「string」'= 0;只有'$ i = array('something')'不會打印任何東西。但它不會給任何錯誤。 – Shoe 2012-02-13 19:25:46

+0

嗯,我應該是一個小前鋒,我暗示它可以是一個字符串或int值傳遞。對不起,我可憐的單詞選擇=) – Eli 2012-02-13 19:27:31

+0

它實際上適用於所有內容,甚至是'NULL'。使用nul或者非設置'$ i',它將打印0. – Shoe 2012-02-13 19:28:42

-1

正如你可以在這裏檢查,它的工作原理:http://codepad.org/hOLQP98D我認爲它的工作原理是因爲它通過

+0

-1;這與跌落無關。在一個案例之後,你只允許使用分號而不是冒號,因爲無論出於何種原因,PHP開發人員決定這樣做。 – 2016-01-16 21:16:24