为什么PHP将switch 0识别为switch语句中的第一种情况?

时间:2017-07-16 14:44:28

标签: php

为什么以下代码会触发第一种情况,而不是实际匹配的情况。

switch (0) {
    case 'test':
        echo 1;
        break;
    case 0:
        echo 2;
}

结果:1​​

似乎是0的内容。如果我尝试switch(1)我什么也得不到,switch(2)会触发预期的case 0

这是在mac和debian的php 7中。

1 个答案:

答案 0 :(得分:2)

您正在将整数与字符串进行比较。这不可能完成,因此PHP会进行隐式类型转换。

PHP选择强制转换为整数并转换'test'

(int)'test'0。因此第一个语句匹配。

这甚至可能更奇怪:

switch (1) {
  case '1test':
    // would also match
  break;
}