3 різні рівні


149

У чому різниця між =, ==і ===?

Я думаю, що використовувати один знак рівності - це оголосити змінну, тоді як два рівні знаки є умовою порівняння, і нарешті, три рівні знаки - для порівняння значень оголошених змінних.


ознайомтеся з прикладом ... Я розмістив це, щоб пояснити більше речей ..
InfantPro'Aravind '14

1
Для просунутих користувачів PHP, знаючи різницю між == і === і запитуючи себе: "чи швидше порівняти з == або з ===, коли я впевнений, що обидва операнди одного типу?", Будь ласка, подивіться у моєму базовому сценарії нижче.
lucaferrario

@Strawberry Я вважаю, що тег питання також повинен містити тег javascript, оскільки він також стосується цієї мови.
Funk Forty Niner

(Оновлення): Я додав тег javascript у редагуванні, оскільки виникло досить багато питань, де люди використовували =в JavaScript. Це стосується не лише PHP, але й інших мов.
Funk Forty Niner

Я пішов вперед і видалив тег JavaScript: всі відповіді тут тільки про PHP ( за винятком останньої , яка дуже слабо), є є відмінність між тим, як мови впоратися з цим, і вже є подібний де - факто канонічний JavaScript питання ( який дорівнює Оператор (== vs ===) повинен використовуватися в порівняннях JavaScript? ).
JJJ

Відповіді:


172

Ви маєте =в оператор присвоювання , ==в «рівного» оператор порівняння і ===в «ідентичний» оператор порівняння .

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

Для отримання додаткової інформації про необхідність ==і ===, і ситуаціях , щоб використовувати кожен погляд на Документах .


коли я порівнюю два однакові дати, у мене є помилковий результат, чому? приклад: sandbox.onlinephpfunctions.com/code/…
stloc

3
@stloc, ===з об’єктами повідомляє, чи є вони одним і тим же об'єктом, а не якщо вони мають однаковий вміст.
Андреа

Введено в PHP4, смішно в Y2018 ;-)
mvorisek

22
  • = є оператором присвоєння
  • == є оператором порівняння (перевіряє, чи мають дві змінні рівні значення)
  • === є ідентичним оператором порівняння (перевіряє, чи дві змінні мають однакові значення і є одного типу).

8

= оператор призначення

== перевіряє, чи мають дві змінні однакове значення

=== перевіряє, чи мають дві змінні однакове значення І чи їхні типи однакові


1
Також знайте про! = І! == "не" версії двох операторів порівняння. Деякі мови використовують: = як призначення, щоб уникнути подібної плутанини.
Філ Перрі

3

Оператор = присвоює значення змінній $ 6 = 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 - рядок типу. Так ось вихід


0

Для просунутих користувачів 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";
?>

ПРИМІТКА. Порівняння діє лише тоді, коли кожен "ПЕРШИЙ Спробуй" дуже близький до свого "ДРУГО Спробуй". Якщо вони суттєво відрізняються, це означає, що процесор був зайнятий чимось іншим під час виконання порівнянь, і тому результати недостовірні, і тест слід запустити знову.


9
Мікробензові позначки, як це, не дуже надійні. Це також малоймовірно, що ви хочете коли-небудь захотіти хвилюватися ==або ===бути причиною проблеми з продуктивністю. ІМО: Краще бути суворим ( ===), якщо ви прямо не хочете бути вільним ( ==) щодо своїх порівнянь. Кількість випадкових крайових випадків, тобто "5 is not a number" == 5може призвести до нерозумних помилок. ===ніколи не страждає від цієї проблеми.
gnarf

Мій тест полягав у тому, щоб сказати програмістам, що якщо вони вибирають ===з міркувань продуктивності, вони помиляються. Таким чином, програмісти можуть вибирати ===або ==ґрунтуватися на логічних причинах, але не на міркуваннях продуктивності: є різні випадки, коли віддають перевагу тому чи іншому, і продуктивність взагалі не повинна враховуватися.
lucaferrario
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.