PHP的奇怪行为,带有开关大小写和字符串“ -0”

时间:2018-12-05 01:40:18

标签: php switch-statement zero

最近,在处理字符串'-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”。

为什么?这种奇怪的行为背后有推理吗?

1 个答案:

答案 0 :(得分:2)

  

在撰写此问题时,我发现 PHP不使用   严格验证切换用例是否相等(与其他脚本不同   语言,例如 JavaScript )。

因此,case '0''0' == '-0'时执行,并且由于是true,因此运行该命令(因为它首先检查了该情况)。

如果将case '-0'放在首位,它将首先检查该首字母,因此执行该大小写,并且由于两种情况都有效/ TRUE它将在switch语句中运行第一种情况< / strong>。