2012-02-13 110 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