开发者

Why does PHP convert String to Integer?

I would like to know on what condition PHP decides when to convert from String to Integer and the other way around

Example:

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

I know I should use '===' to get better results, but I'm curious to know why PHP decides to convert the string to integer and not the other way around.


From the PHP Manual:

a variable's type is determined by the context in which the variable is used. That is to say, if a string value is assigned to variable $var, $var becomes a string. If an integer value is then assigned to $var, it becomes an integer.

See Type Juggling and Type Comparison Table and String conversion to numbers for details:

If the string does not contain any of the characters '.', 'e', or 'E' and the numeric value fits into integer type limits (as defined by PHP_INT_MAX), the string will be evaluated as an integer. In all other cases it will be evaluated as a float.

The value is given by the initial portion of the string. If the string starts with valid numeric data, this will be the value used. Otherwise, the value will be 0 (zero). Valid numeric data is an optional sign, followed by one or more digits (optionally containing a decimal point), followed by an optional exponent. The exponent is an 'e' or 'E' followed by one or more digits.

And the chapter on Strings:

An integer or float is converted to a string representing the number textually (including the exponent part for floats). Floating point numbers can be converted using exponential notation (4.1E+6).

And also (was already given by deceze though) the chapter on Comparison Operators:

If you compare a number with a string or the comparison involves numerical strings, then each string is converted to a number and the comparison performed numerically.


It converts strings to numbers when either operand is a number. The manual puts it cryptically like this:

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

For various types, comparison is done according to the following table (in order).

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

Note that the "in order" part is important when reading this table.


From the manual

When a string is evaluated in a numeric context, the resulting value and type are determined as follows.

If the string does not contain any of the characters '.', 'e', or 'E' and the numeric value fits into integer type limits (as defined by PHP_INT_MAX), the string will be evaluated as an integer. In all other cases it will be evaluated as a float.

The value is given by the initial portion of the string. If the string starts with valid numeric data, this will be the value used. Otherwise, the value will be 0 (zero). Valid numeric data is an optional sign, followed by one or more digits (optionally containing a decimal point), followed by an optional exponent. The exponent is an 'e' or 'E' followed by one or more digits.

  • http://www.php.net/manual/en/language.types.type-juggling.php
  • http://www.php.net/manual/en/language.types.string.php#language.types.string.conversion


Because thats the way they designed the language, as described here.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜