PHP 教學 - 運算子 (Operators) - 下
介紹 PHP 中運算子的用法,包含執行運算子 (Execution Operator)、增值 / 減值運算子 (Incrementing / Decrementing Operator)、邏輯運算子 (Logical Operator)、字串運算子 (String Operator)、陣列運算子 (Array Operator) 和型別運算子 (Type Operator)。
執行運算子
執行運算子 (Execution Operator) 使用兩個倒斜點 (```) 包夾要執行的指令,注意它並不是單引號,他會將執行結果的輸出回傳,可以存到變數。
1 | // 在 Linux 系統列出檔案 |
執行運算子必須在 php.ini
設定的 safe_mode
關閉的情況下才使用。另外也可使用 shell_exec()
函式來達到相同的功能:
1 | // 在 Linux 系統列出檔案 |
增值 / 減值運算子
增值 / 減值運算子 (Incrementing / Decrementing Operator) 包含以下四種:
範例 | 名稱 | 說明 |
---|---|---|
++$a | 前置增值 | $a 先 +1,再回傳 |
$a++ | 後置增值 | $a 先回傳,再 +1 |
–$a | 前置減值 | $a 先 -1,再回傳 |
$a– | 後置減值 | $a 先回傳,再 -1 |
一些範例如下:
1 | $a = 5; |
增值 / 減值運算子也可以使用在字元上,不過他的變化是類似 Perl 而不是 C,例如:’Z’ + 1 會變成 ‘AA’ 而不 ‘Z’ 的下一個字元。
1 | $a = 'W'; |
結果:
1 | string(1) "X" |
增值 / 減值運算子對其他型別沒有效果,除了 NULL 型別做增值運算時會變成 1。
1 | var_dump(--$a); // NULL, 減值仍是 NULL |
另外前置會比後置的效能好,例如:++$i
會比 $i++
的效能好。
邏輯運算子
邏輯運算子 (Logical Operator) 將判斷結果以布林回傳,包含以下運算子:
範例 | 名稱 | 說明 |
---|---|---|
$a and $b | 且 (And) | $a 和 $b 都為TRUE時回傳 TRUE |
$a or $b | 或 (Or) | $a 或 $b 任一為TRUE時回傳 TRUE |
$a xor $b | 互斥 (Xor) | $a 和 $b 只有其中一方為 TRUE 時回傳 TRUE |
! $a | 非 (Not) | $a 不為 TRUE 時回傳 TRUE |
$a && $b | 且 (And) | $a 和 $b 都為 TRUE 時回傳 TRUE |
$a || $b | 或 (Or) | $a 或 $b 任一為 TRUE 時回傳 TRUE |
And 和 Or 有兩種運算子,但他們的優先順序不同。
1 | function trueFunc() { |
字串運算子
字串運算子 (String Operator) 使用 (.
) 符號,回傳左右兩邊字串結合的結果。能與指派運算子並用 (.=
),效果為將字串附加在變數後面。另外,與數字運算時會轉成字串處理:
1 | $a = "Hello "; |
陣列運算子
陣列運算子 (Array Operator) 包含以下運算子:
範例 | 名稱 | 說明 |
---|---|---|
$a + $b | 聯集 | $a 和 $b 的聯集 |
$a == $b | 相等 | $a 和 $b 有相同的 Key 和 Value 時為 TRUE |
$a === $b | 完全相等 | $a 和 $b 有相同的 Key 和 Value 且型別和順序皆相同時為 TRUE |
$a != $b | 不相等 | $a 和 $b 沒有相同的 Key 和 Value 時為 TRUE |
$a <> $b | 不相等 | $a 和 $b 沒有相同的 Key 和 Value 時為 TRUE |
$a !== $b | 不完全相等 | $a 和 $b 沒有相同的 Key 和 Value 或型別或順序不相同時為 TRUE |
當聯集出現相同 Key 不同值的時候,以前面的內容為主:
1 | $a = array("dindin" => "紫色", "lala" => "黃色"); |
當陣列為數字索引要做陣列結合時,使用聯集的效果可能不是你想要的,可以使用 array_merge()
函式:
1 | $a = array("dindin", "lala"); |
型別運算子
型別運算子 (Type Operator) 使用 (instanceof
) 關鍵字,可以用來判斷一個變數是否為某一種類別,並將結果以布林回傳。變數如果繼承自某個類別或實作於某個介面 (Interface),判斷結果會回傳TRUE;另外也可使用另一個物件或字串來判斷:
1 | class ParentClass {} |
除了使用 instanceof
外,也可使用 is_a()
函式來做判斷:
1 | class MyClass {} |