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

。_饼干妹妹 提交于 2019-12-01 21:06:01

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;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!