1. 简介
在 PHP 中,比较运算符是用于将两个值进行比较的一类运算符。其中,常用的比较运算符包括相等性「== 双等号」和恒等性「=== 三等号」。尽管这两个比较运算符都用于比较两个值之间是否相等,但它们在本质上是不同的。
2. 相等性「== 双等号」比较运算符
PHP 中的相等性「== 双等号」比较运算符用于将两个值进行比较,并返回一个布尔值,代表它们是否相等。如果相等,则返回 TRUE;否则返回 FALSE。相等性比较运算符同时允许进行类型转换。
2.1 比较规则
相等性比较运算符在进行比较时,会根据以下规则进行类型转换:
如果两个值的类型相同,则不进行类型转换,直接进行比较。
如果一个值为 null,另一个值为“空字符串”或 “false”,它们相等。
如果一个值为“整数”,另一个值为“浮点数”,它们会被转换为浮点数再进行比较。
如果一个值为“布尔值”,另一个值为“非布尔值”,它们会被转换为布尔值再进行比较。
如果一个值为“对象”,另一个值为“字符串”、“整数”、“浮点数”或“布尔值”,则对象将被转换为字符串后再进行比较。
如果一个值为“数组”,另一个值为“整数”、“浮点数”或“字符串”,则数组将被转换为数值或字符串后再进行比较。
通过以上比较规则,我们可以得出以下结果:
$a = 5;
$b = "5";
if ($a == $b) {
echo "相等";
} else {
echo "不相等";
}
// 输出: 相等
在上述代码中,$a 和 $b 分别是一个整数和一个字符串。因为它们的值相等,因此它们被认为是相等的。由于 PHP 中的相等比较运算符允许类型转换,因此在比较时,字符串 "5" 被转换为整数 5。
2.2 范例
下面列举了一些相等性比较运算符的范例:
字符串和整数的比较
$a = "1";
$b = 1;
if ($a == $b) {
echo "相等";
} else {
echo "不相等";
}
// 输出: 相等
浮点数的比较
$a = 1.23;
$b = 1.23;
if ($a == $b) {
echo "相等";
} else {
echo "不相等";
}
// 输出: 相等
null 和 false 的比较
$a = null;
$b = false;
if ($a == $b) {
echo "相等";
} else {
echo "不相等";
}
// 输出: 相等
3. 恒等性「=== 三等号」比较运算符
PHP 中的恒等性「=== 三等号」比较运算符也用于将两个值进行比较,但与相等性比较运算符不同,它在比较时不会进行类型转换。只有当两个值的类型严格相同时,才会返回 TRUE,否则返回 FALSE。
3.1 比较规则
恒等性比较运算符(===)会比较比较两个值的类型,并且只有当它们的类型都严格相等时(也就是两个值的类型和值都相等时),才会返回 TRUE。
下面列举了一些恒等性比较运算符的范例:
整数的比较
$a = 5;
$b = 5;
if ($a === $b) {
echo "相等";
} else {
echo "不相等";
}
// 输出: 相等
字符串和整数的比较
$a = "1";
$b = 1;
if ($a === $b) {
echo "相等";
} else {
echo "不相等";
}
// 输出: 不相等
3.2 范例
恒等性比较运算符通常用于以下情况:
比较两个变量是否相等,确保它们的类型与值都相等:
$a = 10;
$b = "10";
if ($a === $b) {
echo "相等";
} else {
echo "不相等";
}
// 输出: 不相等
检查返回值是否为 FALSE,而不是 0 或空字符串:
function returnValue() {
return false;
}
if (returnValue() === false) {
echo "返回值为 false";
} else {
echo "返回值不为 false";
}
// 输出: 返回值为 false
4. 总结
PHP 中的相等性比较运算符和恒等性比较运算符都用于将两个值进行比较,但它们的本质是不同的。相等性比较运算符允许进行类型转换,而恒等性比较运算符则不允许进行类型转换。在进行比较时,我们应该根据具体的场景选择相应的比较运算符,确保比较结果的准确性。