どのような違いがある=
、==
と===
?
1つの等号の使用は変数の宣言であり、2つの等号は比較条件であり、最後に3つの等号は宣言された変数の値の比較です。
=
JavaScriptで使用している質問がかなりあったため、私はJavaScriptタグを編集に追加しました。これはPHPだけでなく、他の言語にも当てはまります。
どのような違いがある=
、==
と===
?
1つの等号の使用は変数の宣言であり、2つの等号は比較条件であり、最後に3つの等号は宣言された変数の値の比較です。
=
JavaScriptで使用している質問がかなりあったため、私はJavaScriptタグを編集に追加しました。これはPHPだけでなく、他の言語にも当てはまります。
回答:
あなたは持っている代入演算子、「等しい」比較演算子と「同じ」比較演算子を。=
==
===
$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)
==
およびの必要性、および===
それぞれを使用する状況の詳細については、ドキュメントをご覧ください。
===
オブジェクトを使用すると、同じ内容であるかどうかではなく、同じオブジェクトであるかどうかがわかります。
=代入演算子
== 2つの変数の値が同じかどうかを確認します
=== 2つの変数の値が同じかどうか、およびそれらの型が同じかどうかをチェックします
=演算子は、値を変数$ 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
:
<?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";
?>
注:比較は、各「最初の試行」が「2回目の試行」に非常に近い場合にのみ有効です。それらが大幅に異なる場合は、比較の実行中にプロセッサが何か他の作業を行っていたため、結果の信頼性が低く、ベンチマークを再度実行する必要があることを意味します。
==
たり===
、その原因として考えたりすることもほとんどありません。IMO:比較について===
緩く(==
)したくない場合を除いて、厳密()にすることをお勧めします。奇妙なエッジケースの数、つまり奇妙"5 is not a number" == 5
なバグにつながる可能性があります。===
この問題に苦しむことはありません。
===
、パフォーマンスの理由でしは間違っをでした。したがって、プログラマーは自由に、===
または==
論理的な理由に基づいて自由に選択できますが、パフォーマンス上の理由には基づいていません。