Php 这三个不同的相等
Php 这三个不同的相等,php,comparison,operators,Php,Comparison,Operators,=、=和==之间有什么区别 我认为使用一个等号声明变量,两个等号表示比较条件,最后三个等号表示比较声明变量的值。您有=赋值运算符,=的'equal'比较运算符和==的'equality'比较运算符 $a=$b分配将$a设置为等于$b。 如果$a等于$b,则$a==$b等于TRUE。 $a===$b如果$a等于$b,并且它们的类型相同,则为同一TRUE。(在PHP4中介绍) 有关需要=和==的更多信息,以及每种情况的使用情况,请参阅。=assignment operator ==检查两个变量是否
=
、=
和==
之间有什么区别
我认为使用一个等号声明变量,两个等号表示比较条件,最后三个等号表示比较声明变量的值。您有
=
赋值运算符,=
的'equal'比较运算符和==
的'equality'比较运算符
$a=$b分配将$a设置为等于$b。
如果$a等于$b,则$a==$b等于TRUE。
$a===$b如果$a等于$b,并且它们的类型相同,则为同一TRUE。(在PHP4中介绍)
有关需要
=
和==
的更多信息,以及每种情况的使用情况,请参阅。=assignment operator
==检查两个变量是否具有相同的值
==检查两个变量是否具有相同的值以及它们的类型是否相同
=
是赋值运算符==
是比较运算符(检查是否
两个变量的值相等)=
是相同的比较
运算符(检查是否有两个变量
具有相等的值并且具有相同的属性
类型)对于高级PHP用户,了解
==
和==
之间的区别,并询问自己“当我确定两个操作数的类型相同时,与==
或==
相比,速度更快吗?”
简短而笼统的回答是:在这种情况下使用==
不会提高性能,因此您可能应该使用=
对于那些对自己进行基准测试感兴趣的人,您可以使用我特别编写的以下代码,并为$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";
?>
注:仅当每次“首次尝试”都非常接近其“第二次尝试”时,比较才有效。如果它们显著不同,则表示处理器在执行比较时忙于执行其他操作,因此结果不可靠,应再次运行基准。运算符将值分配给变量 $6=6;值6被分配给变量$6 ==运算符检查两个变量的值是否相等,并且主要用于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用户,了解==和===之间的区别,并询问他们自己“当我确定两个操作数的类型相同时,与==或与===比较快吗?”,请看下面我的基准脚本。@我觉得问题的标记也应该包括该标记,因为它也适用于该语言。(更新):我在编辑中添加了javascript标记,因为在javascript中使用
=
的问题很多。这不仅适用于PHP,也适用于其他语言。我继续并删除了JavaScript标记:这里的所有答案都是关于PHP的(除了最新的非常弱),不同语言处理它的方式存在差异,并且已经有一个类似的事实上的规范JavaScript问题()。也知道!=还有两个比较运算符的“非”版本。有些语言使用:=作为赋值,只是为了避免这种混淆。像这样的微基准不太可靠。您也不太可能担心性能问题的原因是==
或===
。IMO:最好是严格(===
),除非你明确地想要在比较方面放松(==
)。奇怪边缘情况的数量,即“5不是一个数字”==5
,可能会导致奇怪的错误<代码>==从来没有遇到过这个问题。我的测试是告诉程序员,如果他们出于性能原因选择了==
,那么他们就错了。因此,程序员可以根据逻辑原因而不是性能原因自由选择===
或==
:有不同的情况可以选择其中一种或另一种,性能根本不能考虑。当我比较两个相同的日期时间时,我得到了错误的结果,为什么?示例:@stloc,=
with objects告诉您它们是否是相同的对象,而不是它们是否具有相同的内容