为什么用奇怪的逻辑在php中“切换(true){}”?

时间:2012-01-12 02:00:59

标签: php

switch(false) {
    case 'blogHitd':
        echo('ddd');
        break;
    case false:
        echo('bbbb');
        break;
    default:
        echo 'alert("error action");';
 }

------- ------输出

BBBB

switch(true) {
    case 'blogHitd':
        echo('ddd');        
        break;
    case true:
        echo('bbbb');
        break;
     default:
        echo 'alert("error action");';
 }

-------奇怪的输出-------

DDD

为什么,当我传递true的值时,它总会选择第一个?

5 个答案:

答案 0 :(得分:20)

来自Booleans上的PHP文档:

  

转换为布尔值时,以下值被视为FALSE:

     
      
  • 布尔值FALSE本身
  •   
  • 整数0(零)
  •   
  • 浮点数0.0(零)
  •   
  • 空字符串,字符串" 0"
  •   
  • 一个零的数组   元素
  •   
  • 一个零成员变量的对象(仅限PHP 4)
  •   
  • 特别   键入NULL(包括未设置的变量
  •   
  • 从中创建的SimpleXML对象   空标签
  •   
     

其他每个值都被视为TRUE(包括任何资源)。

此引文的最后一句是您案件中的利益线。

答案 1 :(得分:12)

只有在“case”行

中有函数或变量时,切换“true”才有用
switch(true)
{
  case is_array($array):
    echo 'array';
    break;
  default:
    echo 'something else';
    break;
}

答案 2 :(得分:3)

PHP会为你输入值,不要忘记:

php > var_dump(true == 'bloghitd');
bool(true)

答案 3 :(得分:3)

请注意,开关/外壳确实松动了比较。

http://www.php.net/manual/en/types.comparisons.php#types.comparisions-loose

答案 4 :(得分:0)

在这种情况下,开关仅运行第一个有效案例。

如果您有多个可能的答案,但想要只运行第一个答案,那么它很有用。例如:

switch(true){
 case 1 == 2:
   echo '1 == 2';
   break;

 case 2 == 2:
   echo '2 == 2';
   break;

 case 3 == 3:
   echo '3 == 3';
   break;

 case 4 == 1:
   echo '4 == 1';
   break;
}

输出: 2 == 2

第二种和第三种情况都是正确的,但我们只获得第二种情况(这是第一种情况)。