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


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

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

Author: JJJ, 2010-01-14

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)

Для получения дополнительной информации о необходимости == и === и ситуациях, в которых необходимо использовать каждый из них, посмотрите документы.

 155
Author: gnarf, 2016-08-16 14:26:39
  • = является оператором присваивания
  • == - оператор сравнения (проверяет, имеют ли две переменные равные значения)
  • === - идентичный оператор сравнения (проверяет, имеют ли две переменные одинаковые значения и одного типа).
 18
Author: Rich Adams, 2010-01-14 10:44:57

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

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

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

 7
Author: Silvio Donnini, 2010-01-14 10:44:42

Для продвинутых пользователей 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";
?>

ПРИМЕЧАНИЕ: Сравнение допустимо только тогда, когда каждая "ПЕРВАЯ ПОПЫТКА" очень близка к своей "ВТОРОЙ ПОПЫТКЕ". Если они существенно отличаются, это означает, что процессор был занят чем-то другим во время выполнения сравнений, поэтому результаты ненадежны, и тест следует запустить снова.

 1
Author: lucaferrario, 2016-01-01 15:20:25