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

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

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

Ответ 1

У вас = оператор присваивания, == оператор сравнения 'equal' и === оператор 'идентичный'.

$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

  • = - оператор присваивания
  • == является оператором сравнения (проверяет, если две переменные имеют одинаковые значения)
  • === - это тождественное сравнение оператора (проверяет, являются ли две переменные имеют одинаковые значения и имеют одинаковые значения тип).

Ответ 3

= оператор присваивания

== проверяет, имеют ли две переменные одинаковое значение

=== проверяет, имеют ли две переменные одинаковое значение И если их типы одинаковы

Ответ 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/>";
}

?>

Ответ 5

Вы правы, что = - оператор присваивания. Остальные два являются операторами сравнения, которые вы можете прочитать здесь здесь.

Ответ 6

Возможно, вы можете лучше понять разницу между == и === с примером, который включает автоматическое кастинг:

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";
}

Ответ 7

Все остальные уточнили... Я просто хочу добавить пример, чтобы прояснить его больше:

<?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";
    }
?>

Ответ 8

Для продвинутых пользователей 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". Если они существенно отличаются друг от друга, это означает, что процессор был занят чем-то другим во время выполнения сравнений, поэтому результаты ненадежны, и контрольный тест должен быть запущен снова.

Ответ 9

Следующая разница между =. ==. и ===:

= Оператор присваивания,

== Оператор сравнения "Равный" и

=== Идентичный оператор сравнения.

$a = $b Назначьте $$ $равным $b. т.е. $a = 5; Итак, $присваивать значение 5.

$a == $b Равно TRUE, если $a равно $b. т.е. if($a==5) Здесь мы видим, что мы используем == для сравнения значения.

$a === $b Идентичный TRUE, если $a равно $b, и они одного типа. (введенный в PHP 4) т.е. ($a ===5)  Это также используется для сравнения, но оно сравнивает значение, а также тип данных. Это означает $a = '5' и $a = 5 не то же самое. $a = '5' означает $присваивать строку '5' и $a=5 присваивать целочисленное значение 5.

Ответ 10

Оператор = присваивает значение переменной $ six = 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. Так что здесь вывод