Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么';如果';与PHP中的字符串相比,0的条件返回true?字符串是如何解析为零的?_Php_String_Variables_If Statement - Fatal编程技术网

为什么';如果';与PHP中的字符串相比,0的条件返回true?字符串是如何解析为零的?

为什么';如果';与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(

我的web应用程序遇到了以下情况。我需要一个确切的原因和解决办法

<?php
$var = 0;
if ($var == "StringVal") {
    echo $var;
    echo "Wrong";
} else {
    echo "Right";
}
?>

这些代码必须打印出来

,但它可以打印

此问题的可能性是什么?

根据:

如果将数字与字符串进行比较,或者比较涉及数字字符串,则会将每个字符串转换为数字,并以数字形式执行比较

所以
var_dump(0==“a”)将返回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。