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