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()函式來做判斷;
執行運算子(Execution Operator)使用兩個倒斜點(`)包夾要執行的指令,注意它並不是單引號,他會將執行結果的輸出回傳,可以存到變數。
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 }`; ?> |
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 |
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) ?> |
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。
2
3
4
| <?php var_dump(-- $a ); // NULL, 減值仍是NULL var_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 |
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
| <?php function 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)使用(.)符號,回傳左右兩邊字串結合的結果。能與指派運算子並用(.=),效果為將字串附加在變數後面。另外,與數字運算時會轉成字串處理:
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 |
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) ?> |
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;另外也可使用另一個物件或字串來判斷:
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| <?php class 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), 不存在的類別回傳false var_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) ?> |
<?php class MyClass {} $a = new MyClass; var_dump(is_a($a, 'MyClass')); // bool(true) ?>
留言
張貼留言