开关条件在零上计算错误


Switch condition evaluates incorrectly on zero

我正在尝试这样一段代码:

$event = 0;
switch ($event) {
    case 'content':
        echo "/content";
        break;
    case 'start':
        echo "/start";
        break;
    default :
        echo "not available";
        break;
}

这段代码在执行时打印/content,所以…0(0,整数,赋值给$event变量)被评估为"内容"。为什么?

实际情况是这样的

0 == 'content'

Php尝试将字符串content转换为整数。因为content不等于int,所以它只是默认为0。

导致:

0 == 0

发生了从一种类型到另一种类型的隐式转换。

时间间隔('content')为0

这是因为php中在混合数字和字符串变量时定义运算符的方式:当字符串没有有效数字时,它被处理为0

So:
1+"xxx" => 1+0=1
0=="xxxx =>  0==0=>true
etc..

这就是php的设计方式。我不喜欢它。