首页 > 解决方案 > if语句检查字符串是否为问号

问题描述

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

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

输出: 结果:找到一个问题

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

标签: phpif-statement

解决方案


这是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

在这里查看所有版本!

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

if ($niveau === "?")

推荐阅读