php - if语句检查字符串是否为问号
问题描述
我用 PHP 编程已经将近 15 年了,今天我要问一个令我困惑的简单问题。我需要检查字符串是否为“?”......但它不起作用。
$niveau = 0;
$result = "Original";
if($niveau == "?") $result = "Found a question";
echo "Result :".$result;
输出: 结果:找到一个问题
问题,由于 is 的值$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
在这里查看所有版本!
另一种方法,对三个使用严格检查===
:
if ($niveau === "?")
推荐阅读
- deprecated - 从 grails 1.1 迁移到 4.0.11
- javascript - 从动态 django 脆皮表单集中删除标签
- spring-batch - JMS 出站网关 - 接收来自两个作业实例的回复
- r - 如何在 echart 绘图上嵌入图像?
- cuda - 为什么 cuda 内核 w/i 发散的性能优于 w/o 发散?
- shell - 提交后如何tortoiseSVN更新?
- php - laravel 使用密钥加密解密密码
- nginx - 带有 certbot 的新安装的 Nginx 反向代理显示 404 错误页面
- sql - 使用 group by 查询从表中选择特定行
- computer-science - 1946 年的浮点数保存