PHP类型转换混乱

PHP类型转换混乱,php,types,Php,Types,我有以下代码: <?php $val = 0; $res = $val == 'true'; var_dump($res); ?> 我错过什么了吗?谢谢。在PHP中,所有非空、非数字字符串的计算结果都为零,因此0=='true'为true,但0=='true'为FALSE。字符串true尚未转换为布尔值,但正在作为字符串与零进行比较。零保留为int值,而不是强制转换为布尔值。所以最终你会得到: // string 'true' casts to int 0

我有以下代码:

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

    var_dump($res);
?>

我错过什么了吗?谢谢。

在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中进行布尔比较时,类型不同(在本例中为int到string),使用严格比较是很有价值的。

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

试试这个

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

    var_dump($res);
?>


谢谢,很明显with==运算符结果将为FALSE,但0为int,我可以将其事件类型转换为
$res=(int)$val=(string)'true'和结果仍然是真的。对不起,我添加了另一个例子,使我的问题更清楚。我不是说正确的操作数应该是“true”,它可以是任何字符串,当PHP将字符串与整数0(零)进行比较时,结果是:true。@user1393876是的,我在上面提到过。当转换为整数时,任何非数字字符串都是0。谢谢Michael,这就解释了。字符串“true”可能有点混淆,下面是另一个示例:
仍然$res->true。谢谢您的回答,所以从您的逻辑来看,解释器会将第二个操作数的类型转换为第一个操作数的类型,对吗?但是如果我更改操作数,结果仍然是真的:
<?php
    $val = 1;
    $res = (bool)$val == 'true';

    var_dump($res);
?>