为什么';如果';与PHP中的字符串相比,0的条件返回true?字符串是如何解析为零的?
我的web应用程序遇到了以下情况。我需要一个确切的原因和解决办法为什么';如果';与PHP中的字符串相比,0的条件返回true?字符串是如何解析为零的?,php,string,variables,if-statement,Php,String,Variables,If Statement,我的web应用程序遇到了以下情况。我需要一个确切的原因和解决办法 <?php $var = 0; if ($var == "StringVal") { echo $var; echo "Wrong"; } else { echo "Right"; } ?> 这些代码必须打印出来 对 ,但它可以打印 错 此问题的可能性是什么?根据: 如果将数字与字符串进行比较,或者比较涉及数字字符串,则会将每个字符串转换为数字,并以数字形式执行比较 所以var_dump(
<?php
$var = 0;
if ($var == "StringVal") {
echo $var;
echo "Wrong";
} else {
echo "Right";
}
?>
这些代码必须打印出来
对
,但它可以打印
错
此问题的可能性是什么?根据:
如果将数字与字符串进行比较,或者比较涉及数字字符串,则会将每个字符串转换为数字,并以数字形式执行比较
所以var_dump(0==“a”)当Php试图将“a”解析为数字时,code>将返回true,如果解析失败(在本例中发生),则返回0,然后0等于0。要克服此问题,请使用==
对类型进行比较
希望这有帮助。不要在php中使用==
进行比较。改用==
通过这种方式,您可以强制执行类型检查,这将按预期工作。有关PHP类型比较表,请参阅。在这里您可以看到,例如0(int)和“php”(string)之间的“松散比较with==”将返回true。这不是人们所期望的。$var='StringVal'是实现这一点的唯一方式。您将值0分配给$var,这与“StringVal”不同。我正在用字符串检查0值,您是否看到代码…@SathishKumarD检查我的答案。当您将int与字符串进行比较时,字符串将被转换为int,因此“StringVal”将被转换为0,因为它不是一个有效的数字,然后0==0返回true。我认为Osama Sayed对此有正确的答案。它确实在进行类型转换。但如何使两者尽可能平等呢true@SathishKumarD因为如果将StringVal
直接转换为int,它将转换为0,因此您正在比较0==0
谢谢,解析后它将为0。