В чем разница между =
, ==
и ===
?
Я думаю, что использование одного знака равенства – объявить переменную, а два равных знака – для условия сравнения, и, наконец, три равных знака – для сравнения значений объявленных переменных.
У вас есть =
оператор присваивания , ==
оператор сравнения «равно» и ===
оператор сравнения «идентичный» .
$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 = 1; $b = "1"; echo "comparing different types:<br/>"; compare($a, $b); $a = 1; $b = 1; echo "comparing equal types:<br/>"; compare($a, $b); function compare($a, $b) { if($a == $b) echo "a == b<br/>"; if($a === $b) echo "a === b<br/>"; } ?>
Вы правы, что =
– оператор присваивания. Остальные два являются операторами сравнения, о которых вы можете прочитать здесь .
Возможно, вы можете лучше понять разницу между == и === с примером, который включает автоматическое кастинг:
echo '"5 is not a number" == 5'."\n"; if("5 is not a number" == 5) { echo "maybe there is something wrong here\n"; } else { echo " The integer and the string are different\n"; } echo '"5 is not a number" === 5'."\n"; if("5 is not a number" === 5) { echo "maybe there is something wrong here\n"; } else { echo " The integer and the string are different\n"; }
Все остальные уточнили … Я просто хочу добавить пример, чтобы прояснить его больше:
<?php $mystring = 'abc'; $findme = 'a'; $pos = strpos($mystring, $findme); // Note our use of ===. Simply == would not work as expected // because the position of 'a' was the 0th (first) character. if ($pos === false) { echo "The string '$findme' was not found in the string '$mystring'"; } else { echo "The string '$findme' was found in the string '$mystring'"; echo " and exists at position $pos"; } ?>
Для продвинутых пользователей PHP, зная разницу между ==
и ===
и спрашивая себя, «быстрее ли сравнивать с ==
или с ===
когда я уверен, что оба операнда одного типа?»
Короткий и общий ответ: в этом случае нет увеличения производительности при использовании ===
, поэтому вы, вероятно, должны использовать ==
.
Для тех, кто заинтересован в бенчмаркинге самостоятельно, вы можете использовать следующий код, который я написал ad-hoc, и попробовать разные значения для $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"; ?>
ПРИМЕЧАНИЕ. Сравнение действительно только тогда, когда каждый «FIRST TRY» очень близок к «SECOND TRY». Если они существенно отличаются друг от друга, это означает, что процессор был занят чем-то другим, выполняя сравнения, и поэтому результаты ненадежны, и контрольный тест должен быть запущен снова.
Следующая разница между =. ==. и ===:
= Оператор присваивания,
== Оператор сравнения «Равный» и
=== Идентичный оператор сравнения.
$a = $b
Assign Устанавливает $ a равным $ bie $a = 5;
Таким образом, $ присваивает значение 5.
$a == $b
Equal TRUE, если $ a равно $ bie if($a==5)
Здесь мы видим, что мы используем == для сравнения значения.
$a === $b
Идентичный ИСТИНА, если $ a равно $ b, и они одного типа. (введено в PHP 4) т.е. ($a ===5)
Это также используется для сравнения, но оно сравнивает значение, а также тип данных. Это означает, что $a = '5'
и $a = 5
не то же самое. $a = '5'
означает $ присваивать строку '5' и $a=5
присваивать целочисленное значение 5.