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
的值时,它总会选择第一个?
答案 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)
答案 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
第二种和第三种情况都是正确的,但我们只获得第二种情况(这是第一种情况)。