php比较运算符共8个:==、===、!=、!==、、=;其中==和!=会类型转换,===和!==严格比较值与类型,等按字节序比较字符串。

PHP比较运算符有哪些?直接列全,不绕弯
PHP里能用的比较运算符就8个,==、===、!=、!==、、<code>>、、<code>>=。没有(那是旧写法,已废弃),也没有~==之类不存在的符号。
== 和 === 的区别,为什么总出bug
==会做类型转换再比较,===严格比值和类型。这是PHP里最常踩坑的地方。
-
0 == false→true(因为false转成整型是0) -
0 === false→false(类型不同,整型≠布尔) - 用户登录后判断
$_SESSION['role'] == 'admin',如果$_SESSION['role']是0或空字符串,也可能被当成true - 数据库查出来的数字常是字符串,比如
'123' == 123成立,但'123' === 123不成立
!= 和 !== 也得按===逻辑理解
!=对应==,!==对应===。别以为!=只是“取反”,它同样有隐式转换。
-
'0' != false→false(因为'0' == false是true,取反后为false) -
'0' !== false→true(类型不同,直接返回true) - 用
in_array()时默认用==比较,传true进去可能匹配到1或'1',加第三个参数true才启用===
字符串比较用要小心字符集
PHP用字节序比较字符串,不是按Unicode码点,也不是按locale规则。
立即学习“PHP免费学习笔记(深入)”;
'a' → <code>false(因为a的ASCII是97,Z是90)-
'apple' > 'banana'→false(首字母ab,后面不看了) - 中文字符串如
'你好' > '世界'结果不可靠,取决于UTF-8编码字节顺序,不是字典序 - 真要按语言习惯比大小,用
strcmp()或mb_strcasecmp(),别依赖/<code>>
===和!==;字符串比较别图省事用,该调函数就调函数。类型模糊带来的问题,往往在上线后才暴露,而且难复现。










