为什么以下代码会触发第一种情况,而不是实际匹配的情况。
switch (0) {
case 'test':
echo 1;
break;
case 0:
echo 2;
}
结果:1
似乎是0的内容。如果我尝试switch(1)
我什么也得不到,switch(2)
会触发预期的case 0
。
这是在mac和debian的php 7中。
答案 0 :(得分:2)
您正在将整数与字符串进行比较。这不可能完成,因此PHP会进行隐式类型转换。
PHP选择强制转换为整数并转换'test'
。
而(int)'test'
是0
。因此第一个语句匹配。
这甚至可能更奇怪:
switch (1) {
case '1test':
// would also match
break;
}