为什么PHP将String转换为Integer?

spa*_*r79 3 php string comparison integer

我想知道PHP在什么条件下决定何时从String转换为Integer以及另一种方式

例:

$key = 0;
$test = 'teststring';
if($key == $test) {
    echo "Why, tell me why!";
}
else {
    echo "That's the way love goes...";
}
Run Code Online (Sandbox Code Playgroud)

我知道我应该使用'==='来获得更好的结果,但我很想知道为什么PHP决定将字符串转换为整数而不是相反.

Gor*_*don 5

从PHP手册:

变量的类型由使用变量的上下文决定.也就是说,如果将字符串值赋给变量$ var,则$ var变为字符串.如果然后将整数值赋给$ var,则它变为整数.

有关详细信息,请参阅类型Juggling类型比较表以及字符串转换为数字 :

如果字符串不包含任何字符'.','e'或'E',并且数值适合整数类型限制(由PHP_INT_MAX定义),则字符串将被计算为整数.在所有其他情况下,它将被评估为浮点数.

该值由字符串的初始部分给出.如果字符串以有效数字数据开头,则这将是使用的值.否则,该值将为0(零).有效数字数据是可选符号,后跟一个或多个数字(可选地包含小数点),后跟可选指数.指数是'e'或'E',后跟一个或多个数字.

关于字符串章节:

整数或浮点数将转换为以文本方式表示数字的字符串(包括浮点数的指数部分).可以使用指数表示法(4.1E + 6)转换浮点数.

而且(已经由deceze给出)关于比较运算符的章节:

如果将数字与字符串进行比较或比较涉及数字字符串,则每个字符串将转换为数字,并且数字执行比较.