3 разных равных
В чем разница между =
, ==
, и ===
?
Я думаю, что использование одного знака равенства означает объявление переменной, в то время как два знака равенства предназначены для условия сравнения, и, наконец, три знака равенства предназначены для сравнения значений объявленных переменных.
4 answers
У вас есть =
оператор присваивания , ==
оператор сравнения "равный" и ===
оператор сравнения "идентичный".
$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)
Для получения дополнительной информации о необходимости ==
и ===
и ситуациях, в которых необходимо использовать каждый из них, посмотрите документы.
-
=
является оператором присваивания -
==
- оператор сравнения (проверяет, имеют ли две переменные равные значения) -
===
- идентичный оператор сравнения (проверяет, имеют ли две переменные одинаковые значения и одного типа).
= оператор присваивания
== проверяет, имеют ли две переменные одинаковое значение
=== проверяет, имеют ли две переменные одинаковое значение И совпадают ли их типы
Для продвинутых пользователей 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";
?>
ПРИМЕЧАНИЕ: Сравнение допустимо только тогда, когда каждая "ПЕРВАЯ ПОПЫТКА" очень близка к своей "ВТОРОЙ ПОПЫТКЕ". Если они существенно отличаются, это означает, что процессор был занят чем-то другим во время выполнения сравнений, поэтому результаты ненадежны, и тест следует запустить снова.