PHP Type-Cast混乱

时间:2012-05-14 13:47:16

标签: php types

我有以下代码:

<?php
    $val = 0;
    $res = $val == 'true';

    var_dump($res);
?>

我总是觉得$ res应该是'false',就像上面的表达式一样,PHP会尝试将cast $ val键入boolean类型(其中零将被转换为false)和一个字符串(非空字符串是真正)。但如果我执行上面的代码输出将是:

boolean true

我错过了什么吗?感谢。

3 个答案:

答案 0 :(得分:3)

在PHP中,所有非空的非数字字符串都计算为零,因此0 == 'true'为TRUE,但0 === 'true'为FALSE。字符串true尚未转换为布尔值,但正在将字符串与零进行比较。零作为int值保留,而不是作为布尔值转换。所以最终你会得到:

// string 'true' casts to int 0
0 == 0 // true

试试这个:

echo intval('true');
// 0
echo intval('some arbitrary non-numeric string');
// 0

回顾the PHP type comparisons table。通常,在PHP中进行布尔比较时,类型不一样(在这种情况下为int到string),使用严格的比较是很有价值的。

答案 1 :(得分:0)

因为$val是第一个运算符,PHP将字符串true转换为0的整数。因此0 == 0且结果为真;

答案 2 :(得分:0)

试试这个

<?php
    $val = 1;
    $res = (bool)$val == 'true';

    var_dump($res);
?>