2011-04-21 100 views
3

我想知道在什么条件下PHP决定何时从字符串到整数和周围的其他方法为什么PHP将String转换为Integer?

实例转换:

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

我知道我应该用“===”得到更好结果,但我很想知道为什么PHP决定将字符串转换为整数而不是其他方式。

+3

阅读此:http://php.net/manual/en/language.types.type-juggling.php – diEcho 2011-04-21 08:31:29

回答

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 

注意,阅读此表时,“按顺序”部分是很重要的。

+1

+1阅读整个问题,而不仅仅是标题。 – 2011-04-21 08:38:59

+0

thx的信息!我想要的答案... – spankmaster79 2011-04-21 08:47:38

5

从PHP手册:

变量的类型是通过在其中使用该变量的上下文来确定。也就是说,如果将字符串值分配给变量$ var,则$ var变成一个字符串。如果一个整数值被赋值给$ var,它就变成了一个整数。

详见Type JugglingType Comparison TableString conversion to numbers

如果字符串不包含任何的字符,‘E’,或‘E’和数值适合整数“”类型限制(由PHP_INT_MAX定义),字符串将被评估为整数。在所有其他情况下,它将被评估为浮动。

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

chapter on Strings:

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

如果你比较了一些用细绳或比较涉及数字字符串,那么每个字符串转换为数字和:

而且还chapter on Comparison Operators(已经由deceze虽然给出)数值进行比较。

+1

非常好,但问题是*为什么从字符串到整数*而不是其他方式。 @deceze似乎已经回答了这个问题。 – 2011-04-21 08:38:15

+0

也是一个很好的答案... @deeze只是更精确 – spankmaster79 2011-04-21 08:49:18

-1

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

0

从手动

当一个字符串被在数值上下文评价,所得到的值和类型被确定为如下。

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

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

相关问题