php运算符中===和==区别_php严格等于与等于区别【对比】

1次阅读

php运算符中===和==区别_php严格等于与等于区别【对比】

=== 和 == 在 php 里到底差在哪?

区别不在“严不严格”,而在“要不要类型转换”。== 会先尝试把两边转成同一种类型再比较,=== 跳过这步,类型不同直接判 false

比如 0 == "0"true,但 0 === "0"false;又比如 NULL == falsetruenull === falsefalse

哪些场景下 == 容易出人意料?

常见于用户输入、数据库返回值、json 解析结果这类“字符串型数字”或“混合类型数据”的判断。

  • "0" == falsetrue(字符串转布尔:非空即 true?错,PHP 特殊规则:字符串 "0" 转布尔是 false
  • 0 == ""true(空字符串转整数是 0)
  • 1 == truetrue,但 2 == true 也是 true(true 转整数是 1,所有非零数 == true)
  • mysql 查询返回的 tinyint(1) 字段,PHP 可能作为字符串或整数传回来,用 == 判断状态码(如 1 == "1" 没问题,但 1 == "01" 就翻车)

什么时候必须用 ===?

只要你在乎“值对 + 类型对”,就必须用 ===。这不是风格问题,是逻辑安全问题。

立即学习PHP免费学习笔记(深入)”;

  • 函数返回值检查:strpos($str, 'x') === false(不能用 == false,因为位置 0 也是合法返回值,而 0 == false 成立)
  • 配置开关或状态码比对:$config['debug'] === true(避免字符串 "1" 或整数 1 被误认为开启)
  • 数组键存在性判断:array_key_exists('id', $_GET) && $_GET['id'] !== '' 配合 === 做精确非空校验
  • JSON 解析后判断:json_decode($json, true) 返回 null 表示解析失败,此时 json_last_error() === JSON_ERROR_NONE 才可靠

性能和兼容性有影响吗?

几乎没有。PHP 内部对 === 的处理比 == 更轻量——少一次类型推导和转换。PHP 5.4+、7.x、8.x 全系行为一致,不存在兼容性坑。

唯一要注意的是:别在写框架或公共库时为了“省字符”用 ==,调用方无法预判你的输入类型。真实项目里,=== 应该是默认选择,== 属于需加注释的例外。

类型松散不是便利,是隐式契约。你没写明要转什么类型,PHP 就按自己那套规则来,而那套规则连官方文档都得专门开一节叫“Comparison with Various Types”。

text=ZqhQzanResources