最近,在处理字符串'-0'
时,在PHP开关案例中遇到了一个非常奇怪的行为。
/*
The code below echos:
'How did that happen? "0" and "0" are two different strings.'
*/
$myString = '-0';
switch($myString) {
case '0':
echo 'How did that happen? "-0" and "0" are two different strings.';
break;
case '-0':
echo 'This is normal.';
break;
}
奇怪的是,上面的switch语句执行情况'0'。
回到上面的代码,看来如果您更改案例的顺序并将案例'-0'
放在案例'0'
之前,这似乎可以正常工作并执行案例'- 0”。
为什么?这种奇怪的行为背后有推理吗?
答案 0 :(得分:2)
在撰写此问题时,我发现 PHP不使用 严格验证切换用例是否相等(与其他脚本不同 语言,例如 JavaScript )。
因此,case '0'
在'0' == '-0'
时执行,并且由于是true,因此运行该命令(因为它首先检查了该情况)。
如果将case '-0'
放在首位,它将首先检查该首字母,因此执行该大小写,并且由于两种情况都有效/ TRUE
,它将在switch语句中运行第一种情况< / strong>。