PHP教學 - 運算子(Operators) - 下
介紹PHP中運算子的用法,包含執行運算子(Execution
Operator)、增值/減值運算子(Incrementing/Decrementing Operator)、邏輯運算子(Logical
Operator)、字串運算子(String Operator)、陣列運算子(Array Operator)和型別運算子(Type
Operator)。
8. 執行運算子
執行運算子(Execution Operator)使用兩個倒斜點(`)包夾要執行的指令,注意它並不是單引號,他會將執行結果的輸出回傳,可以存到變數。
執行運算子必須在php.ini設定的safe_mode關閉的情況下才使用。另外也可使用shell_exec()函式來達到相同的功能:
9. 增值/減值運算子
增值/減值運算子(Incrementing/Decrementing Operator)包含以下四種:
一些範例如下:
增值/減值運算子也可以使用在字元上,不過他的變化是類似Perl而不是C,例如:'Z'+1會變成'AA'而不'Z'的下一個字元。
結果:
另外前置會比後置的效能好,例如:++$i會比$i++的效能好。
10. 邏輯運算子
邏輯運算子(Logical Operator)將判斷結果以布林回傳,包含以下運算子:
And和Or有兩種運算子,但他們的優先順序不同。
11. 字串運算子
字串運算子(String Operator)使用(.)符號,回傳左右兩邊字串結合的結果。能與指派運算子並用(.=),效果為將字串附加在變數後面。另外,與數字運算時會轉成字串處理:
12. 陣列運算子
陣列運算子(Array Operator)包含以下運算子:
當聯集出現相同Key不同值的時候,以前面的內容為主:
當陣列為數字索引要做陣列結合時,使用聯集的效果可能不是你想要的,可以使用array_merge()函式:
13. 型別運算子
型別運算子(Type Operator)使用(instanceof)關鍵字,可以用來判斷一個變數是否為某一種類別,並將結果以布林回傳。變數如果繼承自某個類別或實作於某個介面(Interface),判斷結果會回傳TRUE;另外也可使用另一個物件或字串來判斷:
除了使用instanceof外,也可使用is_a()函式來做判斷:
8. 執行運算子
執行運算子(Execution Operator)使用兩個倒斜點(`)包夾要執行的指令,注意它並不是單引號,他會將執行結果的輸出回傳,可以存到變數。
1
2
3
4
5
6
7
8
9
10
11
| <?php// 在Linux系統列出檔案$output = `ls al`;// 在Windows系統列出檔案$output = `DIR /A`;echo "<pre>{$output}</pre>";// 利用變數作為參數的用法$param = "/A"; // 傳入的參數$output = `DIR {$param}`;?> |
1
2
3
4
5
6
7
8
9
| <?php// 在Linux系統列出檔案$param = "al"; // 傳入的參數$output = shell_exec("ls {$param}");// 在Windows系統列出檔案$param = "/A"; // 傳入的參數$output = shell_exec("DIR {$param}");echo "<pre>{$output}</pre>";?> |
增值/減值運算子(Incrementing/Decrementing Operator)包含以下四種:
| 範例 | 名稱 | 說明 |
|---|---|---|
| ++$a | 前置增值 | $a先+1,再回傳 |
| $a++ | 後置增值 | $a先回傳,再+1 |
| --$a | 前置減值 | $a先-1,再回傳 |
| $a-- | 後置減值 | $a先回傳,再-1 |
1
2
3
4
5
6
7
8
9
10
11
| <?php$a = 5;var_dump(++$a); // int(6)var_dump($a); // int(6)var_dump($a++); // int(6)var_dump($a); // int(7)var_dump(--$a); // int(6)var_dump($a); // int(6)var_dump($a--); // int(6)var_dump($a); // int(5)?> |
1
2
3
4
5
| <?php$a = 'W';for($i=0;$i<6;$i++) var_dump(++$a);?> |
string(1) "X" string(1) "Y" string(1) "Z" string(2) "AA" string(2) "AB" string(2) "AC"增值/減值運算子對其他型別沒有效果,除了NULL型別做增值運算時會變成1。
1
2
3
4
| <?phpvar_dump(--$a); // NULL, 減值仍是NULLvar_dump(++$a); // int(1), 增值才有作用?> |
10. 邏輯運算子
邏輯運算子(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 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| <?phpfunction trueFunc() { echo "trueFunc"; return true;}function falseFunc() { echo "falseFunc"; return false;}// 當判斷前面的部份能決定結果時, 就不會執行後面的部份var_dump(false && trueFunc()); // bool(false), 不會執行到trueFunc()var_dump(true || falseFunc()); // bool(true), 不會執行到falseFunc()var_dump(false && trueFunc() || falseFunc()); // bool(false), 會執行到falseFunc()var_dump(false AND trueFunc() || falseFunc()); // bool(false), 不會執行到trueFunc()和falseFunc(), 因為這相當於false AND (trueFunc() || falseFunc())// 相當於: ($a = (false || true))$a = false || true; // $a: true// 相當於: (($b = false) or true)$b = false or true; // $b: false, or 不會影響到$b的值, &&和and同理// or一種常用的用法$c = falseFunc() or error_log("執行失敗");$fp = fopen("nofile.php", "r") or die("找不到檔案");echo "不會到這";?> |
字串運算子(String Operator)使用(.)符號,回傳左右兩邊字串結合的結果。能與指派運算子並用(.=),效果為將字串附加在變數後面。另外,與數字運算時會轉成字串處理:
1
2
3
4
5
6
7
8
9
10
11
| <?php$a = "Hello ";$b = $a . "World!"; // $b: Hello World!$a = "Hello ";$a .= "World!"; // $a: Hello World!var_dump("one is " . 1); // string(8) "one is 1"var_dump(169.99); // float(169.99)var_dump(169 . 99); // string(5) "16999"?> |
陣列運算子(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 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| <?php$a = array("dindin"=>"紫色", "lala"=>"黃色");$b = array("dindin"=>"好色", "banana"=>"黃色");print_r($a + $b); // Array ( [dindin] => 紫色 [lala] => 黃色 [banana] => 黃色 )print_r($b + $a); // Array ( [dindin] => 好色 [banana] => 黃色 [lala] => 黃色 )$c = array("a"=>55, "b"=>66);$d = array("a"=>"55", "b"=>"66");$e = array("b"=>66, "a"=>55);var_dump($c == $d); // bool(true)var_dump($c === $d); // bool(false)var_dump($c == $e); // bool(true)var_dump($c === $e); // bool(false)?> |
1
2
3
4
5
6
| <?php$a = array("dindin", "lala");$b = array("dindin", "banana", "fool");print_r($a + $b); // Array ( [0] => dindin [1] => lala [2] => fool )print_r(array_merge($a, $b)); // Array ( [0] => dindin [1] => lala [2] => dindin [3] => banana [4] => fool )?> |
型別運算子(Type Operator)使用(instanceof)關鍵字,可以用來判斷一個變數是否為某一種類別,並將結果以布林回傳。變數如果繼承自某個類別或實作於某個介面(Interface),判斷結果會回傳TRUE;另外也可使用另一個物件或字串來判斷:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| <?phpclass ParentClass {}class MyClass extends ParentClass {}interface FoolInterface {}class LaLaClass implements FoolInterface {}$a = new MyClass;$b = new LaLaClass;var_dump($a instanceof MyClass); // bool(true)var_dump(!($a instanceof MyClass)); // bool(false), 使用(!)判斷不是某個類別var_dump($a instanceof LaLaClass); // bool(false)var_dump($a instanceof ParentClass); // bool(true)var_dump($a instanceof NoClass); // bool(false), 不存在的類別回傳falsevar_dump($b instanceof LaLaClass); // bool(true)var_dump($b instanceof FoolInterface); // bool(true)$c = new MyClass;$d = 'MyClass';var_dump($a instanceof $c); // bool(true), 相同類別var_dump($a instanceof $d); // bool(true)?> |
1
2
3
4
5
6
7
| <?phpclass MyClass {}$a = new MyClass;var_dump(is_a($a, 'MyClass')); // bool(true)?> |
留言
張貼留言