3 เท่ากับที่แตกต่างกัน


149

ความแตกต่างระหว่างคืออะไร=, ==และ===?

ฉันคิดว่าการใช้เครื่องหมายเท่ากับหนึ่งหมายถึงการประกาศตัวแปรในขณะที่เครื่องหมายเท่ากับสองอันใช้สำหรับเงื่อนไขการเปรียบเทียบและสุดท้ายคือเครื่องหมายเท่ากับสามอันสำหรับการเปรียบเทียบค่าของตัวแปรที่ประกาศ


ตรวจสอบตัวอย่าง ... ฉันได้โพสต์มันจะชี้แจงสิ่งอื่น ๆ ..
InfantPro'Aravind '

1
สำหรับผู้ใช้ PHP ระดับสูงการทราบความแตกต่างระหว่าง == และ === และถามตัวเองว่า "เร็วกว่าเมื่อเทียบกับ == หรือ === เมื่อฉันแน่ใจว่าตัวถูกดำเนินการทั้งสองเป็นประเภทเดียวกันหรือไม่" โปรดดู ที่สคริปต์มาตรฐานของฉันด้านล่าง
lucaferrario

@ สตรอเบอร์รี่ฉันรู้สึกว่าแท็กของคำถามควรมีแท็ก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 โดย===มีอ็อบเจกต์บอกคุณว่าพวกเขาเป็นวัตถุเดียวกันหรือไม่ถ้าพวกเขามีเนื้อหาเดียวกัน
Andrea

เปิดตัวใน PHP4, ตลกใน Y2018 ;-)
mvorisek

22
  • = เป็นผู้ดำเนินการที่ได้รับมอบหมาย
  • == เป็นตัวดำเนินการเปรียบเทียบ (ตรวจสอบว่าตัวแปรสองตัวมีค่าเท่ากัน)
  • === เป็นตัวดำเนินการเปรียบเทียบที่เหมือนกัน (ตรวจสอบว่าตัวแปรสองตัวมีค่าเท่ากันและเป็นประเภทเดียวกันหรือไม่)

8

= ผู้ประกอบการที่ได้รับมอบหมาย

== ตรวจสอบว่าตัวแปรสองตัวมีค่าเท่ากันหรือไม่

=== ตรวจสอบว่าตัวแปรสองตัวมีค่าเท่ากันหรือไม่และถ้าชนิดของพวกเขาเหมือนกันหรือไม่


1
ยังรู้เกี่ยวกับ! = และ! == 'ไม่ใช่' รุ่นของโอเปอเรเตอร์การเปรียบเทียบสองรายการ บางภาษาใช้: = เป็นการกำหนดเพื่อหลีกเลี่ยงความสับสนเช่นนี้
Phil Perry

3

ตัวดำเนินการ = กำหนดค่าให้กับตัวแปร $ six = 6 ค่า 6 ถูกกำหนดให้กับตัวแปร $ หก

== ผู้ประกอบการตรวจสอบว่าค่าของตัวแปรทั้งสองเท่ากันและส่วนใหญ่จะใช้ในเงื่อนไขเช่นถ้าคำสั่ง

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

หมายเหตุ: การเปรียบเทียบจะใช้งานได้เมื่อ "FIRST TRY" แต่ละรายการอยู่ใกล้กับ "SECOND TRY" มาก หากพวกเขาแตกต่างกันอย่างมีนัยสำคัญก็หมายความว่าหน่วยประมวลผลไม่ว่างทำอย่างอื่นในขณะที่ดำเนินการเปรียบเทียบและเพื่อให้ผลลัพธ์ไม่น่าเชื่อถือและมาตรฐานควรจะทำงานอีกครั้ง


9
Microbenchmarks เช่นนี้ไม่น่าเชื่อถือมาก นอกจากนี้ยังเป็นไปได้ยากมากที่คุณจะต้องกังวล==หรือ===เป็นสาเหตุของปัญหาประสิทธิภาพการทำงานของคุณ IMO: เป็นการดีที่จะเข้มงวด ( ===) เว้นแต่คุณต้องการคลาย ( ==) อย่างชัดเจนเกี่ยวกับการเปรียบเทียบของคุณ จำนวนกรณีขอบแปลก ๆ เช่น"5 is not a number" == 5สามารถนำไปสู่ข้อบกพร่องที่แปลกประหลาด ===ไม่เคยทนทุกข์ทรมานจากปัญหานี้
แคระ

การทดสอบของฉันคือบอกโปรแกรมเมอร์ว่าถ้าพวกเขาเลือก===ด้วยเหตุผลด้านประสิทธิภาพพวกเขาผิด ดังนั้นโปรแกรมเมอร์มีอิสระที่จะเลือก===หรือ==ขึ้นอยู่กับเหตุผลเชิงตรรกะ แต่ไม่เกี่ยวกับเหตุผลด้านประสิทธิภาพ: มีหลายกรณีที่ต้องการหนึ่งหรืออื่น ๆ และประสิทธิภาพจะต้องไม่ถูกนำมาพิจารณาด้วย
lucaferrario
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.