PHP switch case 和字符串 '-0' 的奇怪行为
PHP strange behaviour with switch case and the string '-0'
我最近在处理字符串 '-0'
.
时遇到 PHP switch case 中的一个非常奇怪的行为
/*
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;
}
Oddly, the switch statement above executes case '0'.
回到上面的代码,似乎 如果你改变案例的顺序并将案例 '-0'
放在案例 '0'
之前,它似乎工作正常并且按原样执行 case '-0'。
这是为什么? 这种奇怪的行为背后有什么原因吗?
While writing this question, I found out that PHP does NOT use
strict equality for validating switch cases (unlike other scripting
languages such as JavaScript).
因此,case '0'
执行 if '0' == '-0'
,并且因为这是真的,所以运行它(因为它首先检查了这种情况)。
如果 case '-0'
放在第一位,它首先检查那个,因此执行那个案例,并且由于两个案例都是有效的/TRUE
,它运行第一个案例switch 语句.
我最近在处理字符串 '-0'
.
/*
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;
}
Oddly, the switch statement above executes case '0'.
回到上面的代码,似乎 如果你改变案例的顺序并将案例 '-0'
放在案例 '0'
之前,它似乎工作正常并且按原样执行 case '-0'。
这是为什么? 这种奇怪的行为背后有什么原因吗?
While writing this question, I found out that PHP does NOT use strict equality for validating switch cases (unlike other scripting languages such as JavaScript).
因此,case '0'
执行 if '0' == '-0'
,并且因为这是真的,所以运行它(因为它首先检查了这种情况)。
如果 case '-0'
放在第一位,它首先检查那个,因此执行那个案例,并且由于两个案例都是有效的/TRUE
,它运行第一个案例switch 语句.