Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> PHP

ความแตกต่างระหว่าง !== และ ==! ใน PHP

ตัวดำเนินการ !== และ ==! มีความหมายต่างกันอย่างสิ้นเชิง

!== - Not Identical (Strict Inequality)

เปรียบเทียบ ทั้งค่าและชนิดข้อมูล (Type) คืนค่า true ถ้าค่าต่างกัน หรือ ชนิดข้อมูลต่างกัน

1 !== 1;     // false (ค่าเท่ากัน, ชนิดเท่ากัน int)
1 !== '1';   // true  (ค่าเท่ากัน แต่ชนิดต่างกัน: int vs string)
1 !== 2;     // true  (ค่าต่างกัน)
'hello' !== 'world'; // true

==! - ไม่ใช่ Operator เดียว! (เป็น == + !)

==! ไม่ใช่ Operator เดียว แต่เป็นการรวมของ == (Loose Equality) และ ! (Logical NOT)

$a ==! $b
// เทียบเท่า:
$a == (!$b)
// หรือ
$a == (not $b)

ตัวอย่างเปรียบเทียบ

 true == true -> true
var_dump($x ==! $y); // bool(true)

// ลองค่าอื่น
$a = 1;
$b = 0;

var_dump($a !== $b); // bool(true)  (1 !== 0)
var_dump($a ==! $b); // bool(true)  (1 == !0 -> 1 == true -> true)

$a = 0;
$b = 0;

var_dump($a !== $b); // bool(false) (0 !== 0 -> false)
var_dump($a ==! $b); // bool(true)  (0 == !0 -> 0 == true -> false? Wait...)
/* 
   !$b = !0 = true
   $a == !$b -> 0 == true -> false (Loose: 0 == true คือ false)
   ผลลัพธ์: bool(false)
*/
var_dump($a ==! $b); // bool(false)

ตารางเปรียบเทียบ

Expressionหมายความว่าใช้เมื่อไหร่
$a !== $b$a ไม่เท่ากับ $b (ค่าและ Type)Strict Comparison (แนะนำ)
$a ==! $b$a เท่ากับ (NOT $b)เกือบไม่มีกรณีใช้จริง (Confusing)
$a != $b$a ไม่เท่ากับ $b (ค่า Loose)Loose Comparison
!$a == $b(NOT $a) เท่ากับ $bLogic Negation

⚠️ ไม่ควรใช้ ==! ในโค้ดจริง

  • อ่านยาก สับสนกับ !==
  • ไม่ใช่ Operator มาตรฐาน
  • พฤติกรรม Loose Comparison (==) ทำให้ Bug หายาก

แนวทางปฏิบัติที่ดี

// ✅ ใช้ Strict Comparison (===, !==) เป็นหลัก
if ($a !== $b) { ... }

// ✅ ถ้าต้องการ Logical NOT ชัดเจน
if (!($a == $b)) { ... } // หรือ
if ($a != $b) { ... }    // Loose
if ($a !== $b) { ... }   // Strict

// ✅ ใช้ Parentheses เพื่อความชัดเจน
$result = ($a == (!$b)); // ชัดเจนกว่า $a ==! $b