在PHP中,0(int,zero)等于“first”或“last”(字符串)?

时间:2011-07-11 01:24:03

标签: php php-5.3

我对我刚刚处理的脚本遇到的问题感到困惑。我有以下内容:

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);

所以,如果我要尝试字符串“first”,我应该输出“a”作为输出。使用字符串“last”,我应该得到“c”,依此类推。当我运行上面的脚本时,使用PHP 5.3,我得到“c”......

困惑,我跑了一个快速测试...

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

两者都返回TRUE ... 为什么??? 我对此行为感到困惑!

4 个答案:

答案 0 :(得分:6)

如果您尝试将字符串与数字进行比较,PHP将尝试将字符串转换为数字。在这种情况下,它无法这样做,因为PHP无法将“first”“last”转换为数字,因此它只是将其转换为零。这使得检查0 == 0,这当然是真的。如果您希望PHP不尝试转换任何内容,请使用标识运算符===(因此,两个操作数必须具有相同的值且属于同一类型)。

答案 1 :(得分:3)

结帐(int) 'first'。这基本上是PHP对右手操作数的作用。

当不在两个不同类型的操作数之间使用严格相等比较运算符(===)时,PHP将强制转换操作数类型。

答案 2 :(得分:1)

PHP是弱类型的。正在发生的事情是它试图将"first"转换为数字。它失败了,并返回零。它现在有两个数字:零和零。要使其不尝试转换类型,请使用===而不是==

答案 3 :(得分:-1)

PHP有点奇怪,因为它将数字比较中的字符串视为0.您可以通过引用变量来强制进行字符串比较:

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;
}
相关问题