为什么PHP将String转换为Integer?

时间:2011-04-21 08:27:37

标签: 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...";
}

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

4 个答案:

答案 0 :(得分:5)

从PHP手册:

  

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

有关详细信息,请参阅Type JugglingType Comparison Table以及String conversion to numbers

  

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

     

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

chapter on Strings:

  

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

而且(已经由deceze给出了)chapter on Comparison Operators

  

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

答案 1 :(得分:4)

当任一操作数是数字时,它将字符串转换为数字。手册就像这样加密:

http://php.net/manual/en/language.operators.comparison.php

  

对于各种类型,根据下表(按顺序)进行比较。

Operand 1           Operand 2

null or string      string              Convert NULL to "", numerical
                                        or lexical comparison
...

string, resource    string, resource    Translate strings and resources
or number           or number           to numbers, usual math

请注意,阅读此表时,“按顺序”部分非常重要。

答案 2 :(得分:0)

来自手册

  

在数值上下文中计算字符串时,结果值和类型确定如下。

     

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

     

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

答案 3 :(得分:-1)

因为这就是他们设计语言的方式,如here所述。