3 разных равны

В чем разница между = , == и === ?

Я думаю, что использование одного знака равенства – объявить переменную, а два равных знака – для условия сравнения, и, наконец, три равных знака – для сравнения значений объявленных переменных.

Solutions Collecting From Web of "3 разных равны"

У вас есть = оператор присваивания , == оператор сравнения «равно» и === оператор сравнения «идентичный» .

 $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.