=,==和===有什么区别?
我认为使用一个等号表示变量,而使用两个等号表示比较条件,最后使用三个等号表示比较变量的值。
看看这个例子...我已经发布了,它将澄清更多的事情..
对于高级PHP用户,了解==和===之间的区别并问自己"当我确定两个操作数是同一类型时,与==或===进行比较会更快吗?",请查看我的 下面的基准脚本。
@Strawberry我觉得问题标签也应该包含javascript标签,因为它也适用于该语言。
(更新):我已经在编辑中添加了javascript标记,因为人们在javascript中使用=的地方存在很多问题。 那不仅适用于PHP,还适用于其他语言。
我继续删除了JavaScript标记:这里的所有答案仅与PHP有关(最新版本除外,该版本非常薄弱),语言处理方式之间存在差异,并且已经存在一个类似的事实上的规范JavaScript问题(等于 运算符(== vs ===)是否应该在JavaScript比较中使用?)。
您具有=赋值运算符,==是"等于"比较运算符,而===是"相同"比较运算符。
$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)
有关==和===的需求以及使用每种情况的更多信息,请参阅文档。
当我比较两个相同的日期时间时,我得到了错误的结果,为什么?示例:sandbox.onlinephpfunctions.com/code/
@stloc,带有对象的===告诉您它们是否是同一对象,而不是它们是否具有相同的内容。
在PHP4中引入,在Y2018中很有趣;-)
=是赋值运算符
==
是比较运算符(检查是否
两个变量具有相等的值)
===是相同的比较
运算符(检查是否有两个变量
具有相等的值,并且具有相同的值
类型)。
=赋值运算符
==检查两个变量是否具有相同的值
===检查两个变量是否具有相同的值,以及它们的类型是否相同
也了解!=和!==而不是两个比较运算符的版本。有些语言使用:=作为赋值,只是为了避免这种混淆。
=运算符将值分配给变量
$ 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类型。所以这里的输出
对于高级PHP用户,了解==和===之间的区别并问自己:"当我确定两个操作数是同一类型时,与==或与===进行比较会更快吗?"
简短而通用的答案是:在这种情况下,使用===不会提高性能,因此您可能应该使用==。
对于有兴趣对其进行基准测试的人,您可以使用我专门编写的以下代码,并尝试$a和$b的不同值:
// 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"
COMPARE == (FIRST TRY):" . number_format($time_two_a, 3) ." seconds";
print"
COMPARE == (SECOND TRY):" . number_format($time_two_b, 3) ." seconds";
print"
COMPARE === (FIRST TRY):" . number_format($time_three_a, 3) ." seconds";
print"
COMPARE === (SECOND TRY):" . number_format($time_three_b, 3) ." seconds";
?>
注意:仅当每个"第一尝试"非常接近其"第二尝试"时,该比较才有效。如果它们明显不同,则意味着处理器在执行比较时正忙于做其他事情,因此结果不可靠,应该重新运行基准测试。
这样的微基准并不是很可靠。您极不可能担心==或===作为性能问题的原因。 IMO:最好严格(===),除非您明确希望比较不严格(==)。奇怪的边缘情况(例如"5 is not a number" == 5)的数量可能会导致古怪的错误。 ===绝不会遇到此问题。
我的测试是告诉程序员,如果出于性能原因选择===,那他们错了。因此,程序员可以基于逻辑原因而不是基于性能原因自由选择===或==:在不同的情况下,一个或另一个更喜欢,并且根本不考虑性能。