if 语句检查字符串是否为问号

时间:2021-03-17 00:45:51

标签: php if-statement

我已经用 PHP 编程将近 15 年了,今天我问了一个让我困惑的简单问题。我需要检查字符串是否是“?”...但它不起作用。

$niveau = 0;
$result = "Original";
if($niveau == "?") $result = "Found a question";
echo "Result :".$result;

输出: 结果:发现一个问题

问题,由于 $niveau 的值是 0,if 语句不应该改变 $retour 的值,但它确实如此!为什么?有人可以解释这种行为吗?

2 个答案:

答案 0 :(得分:1)

这是 Backward Incompatible Changes 之一,它在 PHP 8 中工作正常,但在 PHP 版本 <8 中不起作用。这里的问题是您将字符串与数字进行比较,可能会出错。

0 == "foo" // True (PHP < 8) / False (PHP 8)

这是因为,任何字符串的整数值都是0

<?php
  echo intval("Hello"); // 0
  echo intval("?");     // 0

0 比较得到 true

因此将 $niveau 转换为字符串,然后进行比较以实现向后兼容性。

<?php
  $niveau = 0;
  $result = "Original";
  if ($niveau . "" == "?") {
    $result = "Found a question";
  }
  echo "Result :".$result;

这给了我:

Result :Original

Check here 在所有版本上!

另一种方式,对三个 === 使用严格检查:

if ($niveau === "?")

答案 1 :(得分:1)

您应该比较相同类型的变量。当有不同的类型时,结果可能不是你所期望的。

"0" == "?" // is false
0 == "?"   // is true (PHP 7.3)

将字符串与 int 进行比较时,该字符串将被视为 int。

intval("?") // which is 0 (PHP 7.3)

所以 0 == 0 将返回真;