开发者

In PHP, 0 (int, zero) is equal to "first" or "last" (strings)?

I'm 开发者_JAVA百科confused by something I just ran into in a script I was working on. I had the following:

function getPart($part)
{
    $array = array('a', 'b', 'c');
    if ($part == 'first') $part = 0;
    if ($part == 'last') $part = count($array) - 1;
    if (isset($array[$part])) return $array[$part];
    return false;
}

$position = 0;
echo getPart($position);

So, if I were to try the string "first", I should get "a" as the output. With the string "last" I should get "c" and so on. When I run the script above, with PHP 5.3, I get "c" ...

Confused, I ran a quick test ...

var_dump(0 == 'first');
var_dump(0 == 'last');

Both return TRUE ... WHY??? I am so confused by this behavior!


If you try to compare a string to a number, PHP will try to convert the string to a number. In this case, it fails to do so, since PHP can't convert "first" or "last" into a number, so it simply converts it to zero. This makes the check 0 == 0, which is, of course, true. Use the identity operator, ===, if you want PHP to not attempt to convert anything (so, the two operands must have the same value and be of the same type).


Check out (int) 'first'. That is essentially what PHP is doing to the right hand operand.

PHP will coerce operand types when not using the strict equality comparison operator (===) between two operands of different types.


PHP is weakly typed. What's happening there is it's trying to convert "first" to a number. It fails, and returns zero. It now has two numbers: zero and zero. To make it not try to convert the types, use === rather than ==.


PHP is a bit strange in that it treats a string in numeric comparison as 0. You can force string comparison by quoting the variables:

function getPart($part)
{
    $array = array('a', 'b', 'c');
    if ("$part" == 'first') $part = 0;
    if ("$part" == 'last') $part = count($array) - 1;
    if (isset($array[$part])) return $array[$part];
    return false;
}
0

上一篇:

下一篇:

精彩评论

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

最新问答

问答排行榜