===要求值和类型都相同,==只比较值并可能进行类型转换;例如0=='false'为true但0==='false'为false,推荐优先使用===以避免隐式转换导致的bug。

在PHP里,
==
===
==
===
解决方案
当我们谈论PHP中的比较运算符,
==
===
==
0 == false
true
false
0
'1' == 1
true
'1'
1
==
==
立即学习“PHP免费学习笔记(深入)”;
而
===
0 === false
false
'1' === 1
false
举个例子:
<?php $a = 0; $b = false; $c = '0'; $d = null; $e = array(); echo "a == b: " . var_export($a == $b, true) . "\n"; // true (0 和 false 宽松相等) echo "a === b: " . var_export($a === $b, true) . "\n"; // false (类型不同) echo "a == c: " . var_export($a == $c, true) . "\n"; // true (0 和 '0' 宽松相等) echo "a === c: " . var_export($a === $c, true) . "\n"; // false (类型不同) echo "b == c: " . var_export($b == $c, true) . "\n"; // true (false 和 '0' 宽松相等) echo "b === c: " . var_export($b === $c, true) . "\n"; // false (类型不同) echo "d == null: " . var_export($d == null, true) . "\n"; // true echo "d === null: " . var_export($d === null, true) . "\n"; // true (类型和值都相同) echo "e == false: " . var_export($e == false, true) . "\n"; // true (空数组宽松等于 false) echo "e === false: " . var_export($e === false, true) . "\n"; // false (类型不同) ?>
通过这些例子,你会发现
===
==
PHP的类型转换,或者说“类型杂耍”(Type Juggling),是
==
具体来说,当
==
0
0 == 'abc'
true
'abc'
0
true
1
false
0
false == 0
true
true == 1
true
''
[]
null
0
'0'
false
false
==
true
null
null
null
==
true
false
''
[]
==
true
==
这种类型转换的“魔法”虽然有时能简化代码,比如你从用户输入拿到的可能是一个字符串
"123"
123
==
if ($a == $b)
$a
$b
===
==
在我看来,现代PHP开发中,
===
==
===
==
优先使用
===
1
false
if ($result == 0)
$result
false
false == 0
true
null
''
0
'0'
0
==
true
而使用
if ($result === false)
$result
false
0
null
''
'0'
false
具体的使用场景建议:
false
false
null
===
strpos()
false
0
if (strpos($haystack, $needle) == false)
0
false
if (strpos($haystack, $needle) === false)
===
0
'0'
false
===
null
false
0
null
false
0
null
false
0
===
总而言之,
===
===
==
虽然我极力推荐在大多数情况下使用
===
==
我能想到的几个
==
处理来自非严格类型源的数据: 比如,你从数据库中读取一个字段,它在PHP中可能被转换为字符串(即使在数据库中是数字),而你手头有一个整数值需要与之比较。或者,你正在处理一个老旧的API接口,它返回的数据类型不够一致,有时是数字,有时是数字字符串。在这种情况下,如果你确定你只关心值是否相等,并且预料到类型可能不一致,
==
<?php
$db_id = '123'; // 从数据库读出来可能是字符串
$user_input_id = 123; // 用户提交的可能是整数
if ($db_id == $user_input_id) {
// 在这里,'123' == 123 会是 true,避免了手动 intval($db_id)
echo "ID匹配。\n";
}
?>这里,
==
检查“空”或“假”的广义概念: PHP中很多东西在布尔上下文中都被视为
false
0
0.0
''
'0'
null
[]
== false
||
<?php
$value = ''; // 可能是空字符串,也可能是 0, null 等
if ($value == false) {
echo "这个值在布尔上下文中被认为是假的。\n";
}
?>当然,你也可以用
empty()
empty()
与某些内置函数或框架行为配合: 有些PHP内置函数或第三方框架在设计时,可能就是基于
==
in_array()
==
true
<?php
$haystack = [1, '2', 3];
$needle = '1';
if (in_array($needle, $haystack)) { // 默认使用 ==,'1' == 1 为 true
echo "'1' 在数组中。\n";
}
if (in_array($needle, $haystack, true)) { // 严格比较,'1' === 1 为 false
echo "'1' 在数组中(严格)。\n";
} else {
echo "'1' 不在数组中(严格)。\n";
}
?>在这种情况下,如果你想利用
in_array()
==
即便在这些场景下,我仍然会建议你三思。很多时候,显式的类型转换(如
intval()
(string)
(bool)
===
==
===
以上就是PHP中==和===有什么不同_PHP中相等与全等运算符的区别分析的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号