邏輯運算子(Logical Operator)

邏輯運算是用來在流程控制時做邏輯判斷用的

邏輯運算的方式有以下4種:

範例 名稱 說明
$a and $b / $a && $b 且(And) $a和$b都為TRUE時回傳TRUE
$a or $b / $a **\ \ ** $b 或(Or) $a或$b任一為TRUE時回傳TRUE
$a xor $b 互斥(Xor) $a和$b只有其中一方為TRUE時回傳TRUE
! $a 非(Not) $a為FALSE時回傳TRUE

其中且(And)或(Or)有2種運算符號,2種運算符號執行的結果是一樣的,只差在「運算的優先順序」不同。

運算的優先順序請參考本章節的最後一篇文章 - 運算子優先順序

需要注意的是且(And)或(Or)的運算方式是「短路運算」

請先看一下下面的範例

<?php
    function printTrue() {
      echo "TRUE";
      return true;
    }

    function printFalse() {
      echo "False";
      return false;
    }

    //當判斷前面的部份能決定結果時, 就不會執行後面的部份

    //由於&&/and要2個true,結果才是true,前面的false已經可以決定and的結果是false,後面的printTrue()就不會被執行了
    (false && printTrue());  //不會執行到printTrue()
    (false and printTrue());  //不會執行到printTrue()

    //由於||/or要2個false,結果才是false,前面的true已經可以決定or的結果是true,後面的printFalse()就不會被執行了
    (true || printFalse());  //不會執行到printFalse()
    (true or printFalse()); //不會執行到printFalse()

    //當判斷前面的部分尚未能確定結果時,後面的部分會被繼續執行

    //and前面是true,需要運算完成後面的函數才能決定回傳值
    (true and printTrue());  //output:TRUE

    //or前面是false,需要運算完成後面的函數才能決定回傳值
    (false or printFalse()); //output:FALSE
?>

可以看到&&/and||/or在計算時,如果判斷前面的部分就已經能確定結果了,就不會執行後面的部份,藉此增加程式的效能

這就是所謂的「短路運算」

邏輯運算時強制轉型成布林值

另外,在進行邏輯運算時,非布林值會強制轉成布林值進行邏輯運算

資料類型章節的布林值介紹文章中的「強制轉型成「布林值」的規則」,有提到非布林值強制轉型的規則

哪些情況轉型之後會是true,哪些的結果是false

這部分在使用的時候需要多注意,否則會造成運算結果與預期的不同,導致程式碼出現bug

results matching ""

    No results matching ""