【问题标题】:Why 'IF' condition return true for the 0 compared to string in PHP? and how the string parsed as zero? [duplicate]与 PHP 中的字符串相比,为什么 'IF' 条件为 0 返回 true?以及字符串如何解析为零? [复制]
【发布时间】:2016-06-24 07:48:35
【问题描述】:

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

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

这些代码必须打印

,但它打印出来

0错

这个问题的可能性有哪些?

【问题讨论】:

  • $var = 'StringVal' 是完成这项工作的唯一方法。您将值 0 分配给 $var,这与 'StringVal' 不同。
  • 我正在用字符串检查0值,你看到代码了吗...
  • @SathishKumarD 检查我的答案。当您将 int 与字符串进行比较时,字符串将转换为 int,因此“StringVal”将被转换为 0,因为它不是有效数字,然后 0 == 0 返回 true。
  • 我相信 Osama Sayed 对此有正确的答案。

标签: php string variables if-statement


【解决方案1】:

根据official documentation

如果您将数字与字符串进行比较,或者比较涉及数字字符串,则每个字符串都将转换为数字并以数字方式进行比较。

所以var_dump(0 == "a"); 将在 Php 尝试将“a”解析为数字时返回 true,如果在这种情况下解析失败,它会返回 0,然后 0 等于 0。要克服这个问题,请将类型比较为很好地使用===

希望这会有所帮助。

【讨论】:

  • 谢谢,解析后为零。
【解决方案2】:

不要在 php 中使用== 进行比较。请改用===

通过这种方式,您可以强制执行类型检查,这将按预期工作。有关 PHP 类型比较表,请参阅 here。在那里,您会看到“与 == 的松散比较”,例如0 (int) 和 "php" (string) 将返回 true。这不是人们所期望的。

【讨论】:

  • 它确实适用于类型转换。但是如何使两者都等于 true
  • @SathishKumarD 因为如果 StringVal 直接转换为 int 它会转换为 0,所以您正在比较 0 == 0
猜你喜欢
  • 2012-04-12
  • 2012-01-30
  • 2012-07-20
  • 1970-01-01
  • 2018-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多