25   PHP and และ or นั้นมี precedence "ต่ำกว่า" && และ ||

>> รู้หมือไร่ <<
 
ใน PHP มี Logical operator && และ || เหมือนกับภาษาตระกูล C ทั่วไป
แต่ก็ยังมี and และ or ด้วย (และยังมี xor อีก!)
ซึ่งหลายคนอาจจะคิดว่ามันเหมือนกัน เป็นแค่ alias เหมือน C++ (หรือ trigraph ถ้าจะเรียกให้ถูกจริงๆ)
แต่จริงๆ แล้วมันต่างกัน แล้วมันต่างกันตรงไหนล่ะ
คำตอบคือ precedence
 
and และ or นั้นมี precedence "ต่ำกว่า" && และ ||
 
ตัวอย่าง
 
if ($a && $b || $c and $x || $y && $z) {
    // Do something ...
}
 
ถ้าหาก and เป็น alias ของ && จะมีความหมายว่า
 
if (
  ($a && $b) || ($c && $x) || ($y && $z)
) {
    // Do something ...
}
 
แต่จริงๆ แล้วมีความหมาย
 
if (
  (($a && $b) || $c) and ($x || ($y && $z))
) {
    // Do something ...
}
 
เพราะ and มี precedence ต่ำกว่า && และ ||
ซึ่ง operator นี้แทบจะไม่ใช้กันในชีวิตจริง ที่เห็นบ่อยสุดก็คือใช้ร่วมกับ
die()​
เช่น
 
doSomething() or die();
 
แต่จริงๆ แล้วมันอาจจะมีประโยชน์ในการ group เงื่อนไขหลายๆ อันเข้าด้วยกันโดยไม่ต้องใช้วงเล็บเยอะ
และดูสะอาดตาอีกด้วย

Credit: Admin (phpinfo.in.th)
Back to Top