在PHP中非常奇怪的行为

Wel*_*ind 5 php

我有这个代码:

$test = 0;
if ($test == "on"){
    echo "TRUE";
}
Run Code Online (Sandbox Code Playgroud)

此代码的结果将是:

TRUE
Run Code Online (Sandbox Code Playgroud)

为什么???我的PHP版本:5.4.10.

Sou*_*ose 5

如果将数字与字符串进行比较,或者比较涉及数字字符串,则每个字符串都会转换为数字,并以数字方式进行比较。这些规则也适用于 switch 语句。当比较为 === 或 !== 时,不会发生类型转换,因为这涉及比较类型和值。

$test = 0;
if ($test === "on"){
    echo "TRUE";
}
Run Code Online (Sandbox Code Playgroud)

PHP 会将字符串转换为数字进行比较。使用===,将比较值以及数据类型。

var_dump(0 == "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true
var_dump("10" == "1e1"); // 10 == 10 -> true
var_dump(100 == "1e2"); // 100 == 100 -> true
Run Code Online (Sandbox Code Playgroud)

文档