=
、==
和===
之间有什么区别?
我认为,使用单个等号是用来声明变量的,而双等号用于比较条件,最后三个等号用于比较已声明变量的值。
=
、==
和===
之间有什么区别?
我认为,使用单个等号是用来声明变量的,而双等号用于比较条件,最后三个等号用于比较已声明变量的值。
你有=
赋值运算符,==
等于比较运算符和===
恒等比较运算符。
$a = $b Assign Sets $a to be equal to $b.
$a == $b Equal TRUE if $a is equal to $b.
$a === $b Identical TRUE if $a is equal to $b, and they are of the same type. (introduced in PHP 4)
更多关于使用==
和===
的必要性以及在哪些情况下使用每个操作符,可以参考文档。
===
比较对象时,它会告诉你这些对象是否是同一个对象,而不是它们是否具有相同的内容。 - Andrea=
是赋值运算符 ==
是比较运算符(检查两个变量是否具有相等的值)===
是严格比较运算符(检查两个变量是否具有相等的值和相同的类型)。= 赋值运算符
== 检查两个变量是否具有相同的值
=== 检查两个变量是否具有相同的值,并且它们的类型也相同
等于运算符将值赋给一个变量,例如 $six = 6; 将值 6 赋给变量 $six。
== 运算符用于检查两个变量的值是否相等,通常在条件语句(例如 if 语句)中使用。
$a = 2;
$b = 2;
if ($a == $b) {
echo both variables have the same value;
}
===运算符类似于==(检查值是否相等),并且还会检查两个数据类型是否相同
$a = 2;
$b = "2";
if ($a === $b) {
echo "both variable have same value and of same data type";
} else {
echo 'both variable is either not equal or not of same data type';
}
// 这里的 $a 是 int 类型,而 $b 是 string 类型。因此,这里的输出结果是
==
和===
之间的差异,并询问自己“使用==
或===
进行比较时,两个操作数类型相同,哪一个更快?”===
没有性能优势,因此您应该使用==
。
对于有兴趣自行进行基准测试的人,可以使用我编写的以下代码,并尝试为$a
和$b
使用不同的值:<?php
// CONFIGURATION
$cycles = 1000000;
$a = 'random string 1';
$b = 'random string 2';
// FUNCTIONS
function compare_two_equals($a, $b) {
if ($a == $b) {
return TRUE;
} else {
return FALSE;
}
}
function compare_three_equals($a, $b) {
if ($a === $b) {
return TRUE;
} else {
return FALSE;
}
}
// EXECUTION
$time = microtime(TRUE);
for ($count_a = 0; $count_a < $cycles; $count_a++) {
compare_two_equals($a, $b);
}
$time_two_a = microtime(TRUE) - $time;
$time = microtime(TRUE);
for ($count_a = 0; $count_a < $cycles; $count_a++) {
compare_three_equals($a, $b);
}
$time_three_a = microtime(TRUE) - $time;
$time = microtime(TRUE);
for ($count_a = 0; $count_a < $cycles; $count_a++) {
compare_two_equals($a, $b);
}
$time_two_b = microtime(TRUE) - $time;
$time = microtime(TRUE);
for ($count_a = 0; $count_a < $cycles; $count_a++) {
compare_three_equals($a, $b);
}
$time_three_b = microtime(TRUE) - $time;
$time = microtime(TRUE);
// RESULTS PRINTING
print "<br />\nCOMPARE == (FIRST TRY): " . number_format($time_two_a, 3) . " seconds";
print "<br />\nCOMPARE == (SECOND TRY): " . number_format($time_two_b, 3) . " seconds";
print "<br />\nCOMPARE === (FIRST TRY): " . number_format($time_three_a, 3) . " seconds";
print "<br />\nCOMPARE === (SECOND TRY): " . number_format($time_three_b, 3) . " seconds";
?>
注意:只有当每个“第一次尝试”非常接近其“第二次尝试”时,比较才是有效的。如果它们显着不同,则意味着处理器在执行比较时正在忙于其他事情,因此结果不可靠,应重新运行基准测试。
==
或 ===
是导致性能问题的原因。在我看来:除非你明确想要进行宽松的比较(==
),否则最好严格使用 (===
)。许多奇怪的特殊情况(例如 "5不是数字" == 5
)可能会导致奇怪的错误。===
从不受此问题困扰。 - gnarf===
,那么他们是错误的。因此,程序员可以根据逻辑原因自由选择===
或==
,但不能基于性能原因:有不同的情况可以优先选择其中一个,而性能绝不能考虑在内。 - lucaferrario
=
的。这不仅适用于PHP,还适用于其他语言。 - Funk Forty Niner