我已经使用 PHP 编程近 15 年了,今天我要问一个令我困惑的简单问题。我需要检查字符串是否是“?”...但它不起作用。
$niveau = 0;
$result = "Original";
if($niveau == "?") $result = "Found a question";
echo "Result :".$result;
输出: 结果:找到问题
问题,由于$niveau
的值为0
,if语句不应该改变$retour
的值,但它确实改变了!为什么?有人可以解释这种行为吗?
最佳答案
这是 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 === "?")
关于php - if 语句检查字符串是否为问号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66665495/