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 语句.