2

我有以下代码:

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

    var_dump($res);
?>

我一直认为 $res 应该是“假”,因为在上面的表达式中 PHP 会尝试将类型转换 $val 输入布尔类型(其中零将被转换为假)和字符串(非空字符串为真)。但是如果我执行上面的代码,输出将是:

boolean true

我错过了什么吗?谢谢。

4

3 回答 3

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

查看PHP 类型比较表。一般来说,当在 PHP 中进行布尔比较并且类型不相同时(在这种情况下为 int 到 string),使用严格比较很有价值。

于 2012-05-14T13:48:40.427 回答
0

尝试这个

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

    var_dump($res);
?>
于 2012-05-14T13:51:13.567 回答
0

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

于 2012-05-14T13:49:04.130 回答