PHP8:PHP的運算子
本章將介紹PHP的運算子。
運算子這個問題在每種語言裡都有,因為我們已經熟悉了程式語言裡的一種或是多種,所以只需要瞭解一下就行了。
概括一下吧。
PHP運算子有很多種,看樣子要比C/C++,C#等語言多多了。分別是:
- 算術運算子
- 賦值運算子
- 位運算子
- 比較運算子
- 錯誤控制運算子
- 執行運算子
- 遞增/遞減運算子
- 邏輯運算子
- 字串運算子
- 陣列運算子
- 型別運算子
這也是蠻多的,五花八門的。
算術運算子
例子
|
名稱
|
結果
|
-$a |
取反 |
$a 的負值。 |
$a + $b |
加法 |
$a 和 $b 的和。 |
$a – $b |
減法 |
$a 和 $b 的差。 |
$a * $b |
乘法 |
$a 和 $b 的積。 |
$a / $b |
除法 |
$a 除以 $b 的商。 |
$a % $b |
取模 |
$a 除以 $b 的餘數。 |
位運算子
例子
|
名稱
|
結果
|
$a & $b |
And(按位與) |
將把 $a 和 $b 中都為 1 的位設為 1。 |
$a | $b |
Or(按位或) |
將把 $a 或者 $b 中為 1 的位設為 1。 |
$a ^ $b |
Xor(按位異或) |
將把 $a 和 $b 中不同的位設為 1。 |
~ $a |
Not(按位非) |
將 $a 中為 0 的位設為 1,反之亦然。 |
$a << $b |
Shift left(左移) |
將 $a 中的位向左移動 |
$a >> $b |
Shift right(右移) |
將 $a 中的位向右移動 |
比較運算子
例子
|
名稱
|
結果
|
$a == $b |
等於 |
TRUE,如果 $a 等於 $b。 |
$a === $b |
全等 |
TRUE,如果 $a 等於 $b,並且它們的型別也相同。(PHP 4 引進) |
$a != $b |
不等 |
TRUE,如果 $a 不等於 $b。 |
$a <> $b |
不等 |
TRUE,如果 $a 不等於 $b。 |
$a !== $b |
非全等 |
TRUE,如果 $a 不等於 $b,或者它們的型別不同。(PHP 4 引進) |
$a < $b |
小與 |
TRUE,如果 $a 嚴格小於 $b。 |
$a > $b |
大於 |
TRUE,如果 $a 嚴格 $b。 |
$a <= $b |
小於等於 |
TRUE,如果 $a 小於或者等於 $b。 |
$a >= $b |
大於等於 |
TRUE,如果 $a 大於或者等於 $b。 |
遞增/遞減運算子
例子
|
名稱
|
效果
|
++$a |
前加 |
$a 的值加一,然後返回 $a。 |
$a++ |
後加 |
返回 $a,然後將 $a 的值加一。 |
–$a |
前減 |
$a 的值減一, 然後返回 $a。 |
$a– |
後減 |
返回 $a,然後將 $a 的值減一。 |
邏輯運算子
例子
|
名稱
|
結果
|
$a and $b |
And(邏輯與) |
TRUE,如果 $a 與 $b 都為 TRUE。 |
$a or $b |
Or(邏輯或) |
TRUE,如果 $a 或 $b 任一為 TRUE。 |
$a xor $b |
Xor(邏輯異或) |
TRUE,如果 $a 或 $b 任一為 TRUE,但不同時是。 |
! $a |
Not(邏輯非) |
TRUE,如果 $a 不為 TRUE。 |
$a && $b |
And(邏輯與) |
TRUE,如果 $a 與 $b 都為 TRUE。 |
$a || $b |
Or(邏輯或) |
TRUE,如果 $a 或 $b 任一為 TRUE。 |
陣列運算子
例子
|
名稱
|
結果
|
$a + $b |
聯合 |
$a 和 $b 的聯合。 |
$a == $b |
相等 |
如果 $a 和 $b 具有相同的鍵/值對則為 |
$a === $b |
全等 |
如果 $a 和 $b 具有相同的鍵/值對並且順序和型別都相同則為 |
$a != $b |
不等 |
如果 $a 不等於 $b 則為 |
$a <> $b |
不等 |
如果 $a 不等於 $b 則為 |
$a !== $b |
不全等 |
如果 $a 不全等於 $b 則為 |
當然還有幾種型別的沒有列出,將在後面描述。我們先看看列出的吧。
如果沒有對上面的運算子做特殊說明,那麼說明它們和C#裡的相似。
- 首先看看位運算裡的左移(<<)或右移(>>),其實沒有什麼不同,只是符號不一樣而已。
- 看看比較運演算法裡的“==”,“===”,這兩個比較有意思,它們有什麼區別呢?
看看一下程式碼:
2 var_dump(0 == “a“); // 0 == 0 -> true
3 var_dump(“1“ == “01“); // 1 == 1 -> true
4
5 switch (“a“) {
6 case 0:
7 echo “0“;
8 break;
9 case “a“: // never reached because “a” is already matched with 0
10 echo “a“;
11 break;
12 }
看第2行,為什麼0會等於“a”呢?奇怪了。之所以會相等,是因為在PHP裡,如果整型和字串比較時,字串會自動的轉化為數值。這裡就會有一個問題:字串轉化為數值的原則是什麼?原則是
1)如果包括“.”,“e”或“E”其中任何一個字元的話,字串被當作
float 來求值。否則就被當作整數。
2)該值由字串最前面的部分決定。如果字串以合法的數字資料開始,就用該數字作為其值,否則其值為
0(零)。合法數字資料由可選的正負號開始,後面跟著一個或多個數字(可選地包括十進位制分數),後面跟著可選的指數。指數是一個“e”或者“E”後面跟著一個或多個數字。例如:
2 $var = 1 + “10.5“;
3 echo “1 + “10.5“=“.$var.“; type:“.gettype($var).“<Br>“;
4 $var = 1 + “-1.3e3“;
5 echo “1 + “–1.3e3“=“.$var.“; type:“.gettype($var).“<Br>“;
6 $var = 1 + “bob-1.3e3“;
7 echo “1 + “bob–1.3e3“=“.$var.“; type:“.gettype($var).“<Br>“;
8 $var = 1 + “bob3“;
9 echo “1 + “bob3“=“.$var.“; type:“.gettype($var).“<Br>“;
10 $var = 1 + “10 beatiful birds“;
11 echo “1 + “10 beatiful birds“=“.$var.“; type:“.gettype($var).“<Br>“;
12 $var= 4 + “10.2 Little Apple“;
13 echo “4 + “10.2 Little Apple“=“.$var.“; type:“.gettype($var).“<Br>“;
14 $var = “10.0 pigs “ + 1;
15 echo ““10.0 pigs “ + 1=“.$var.“; type:“.gettype($var).“<Br>“;
16 $var = “10.0 pigs “ + 1.0;
17 echo ““10.0 pigs “ + 1.0=“.$var.“; type:“.gettype($var).“<Br>“;
18 ?>
19
輸出的結果是:
1 + “-1.3e3“=-1299; type:double
1 + “bob-1.3e3“=1; type:integer
1 + “bob3“=1; type:integer
1 + “10 beatiful birds“=11; type:integer
4 + “10.2 Little Apple“=14.2; type:double
“10.0 pigs “ + 1=11; type:double
“10.0 pigs “ + 1.0=11; type:double
現在明白是怎麼回事了吧。為什麼“a”為0就是這個道理。
既然如此,還有一個“===”,3個等於符號,它表示不僅最後轉化的數值相等,而且型別也應該相等。看看下面的程式碼:
2 var_dump(0 === “a“); // 0 === 0 -> false
3 echo `<br>`;
4 var_dump(0 === “00“); // 0 === “00” -> false
5 echo `<br>`;
6 var_dump(0 === 0); // 0 === 0 -> true
7 echo `<br>`;
8 ?>
輸出結果為:
bool(false)
bool(true)
第6行之所以為true,是因為它們不僅數值相等,而且型別也一樣。
3)看看邏輯運算,“或”和“與”居然有2種寫法,如果你使用C/C++,C#,Java等語言的話,就用“&&”或”||”吧。如果你是VB的話,就用and,和or。當然你也可以2種都用。它們有什麼區別呢?優先順序的不同而已。”&&“與”||”比”and“和”or“優先順序要高。
4).PHP多了一個陣列運算子。有了上面的解釋,相信它們不是很難了。
- 賦值運算子
和C#語言一樣,也是利用”=“,也是利用二元符號賦值。例如:
$a=`hello`; //$a是hello。
$a+=1; //$a是1,二元賦值符
$b=`world`;
$c=`hello`;
$c.=$b;//$c是”hello world”
?>
- 錯誤執行運算子
PHP 支援一個錯誤控制運算子:@。當將其放置在一個 PHP
表示式之前,該表示式可能產生的任何錯誤資訊都被忽略掉。
如果啟用了 track_errors
特性,表示式所產生的任何錯誤資訊都被存放在變數
$php_errormsg
中。此變數在每次出錯時都會被覆蓋,所以如果想用它的話就要儘早檢查。例如:
/* Intentional file error */
$my_file = @file (`non_existent_file`) or
die (“Failed opening file: error was `$php_errormsg`“); // this works for any expression, not just functions:
$value = @$cache[$key];
// will not issue a notice if the index $key doesn`t exist.
?>
- 執行運算子
PHP 支援一個執行運算子:反引號(“)。注意這不是單引號!PHP 將嘗試將反引號中的內容作為外殼命令來執行,並將其輸出資訊返回(例如,可以賦給一個變數而不是簡單地丟棄到標準輸出)。使用反引號運算子“`”的效果與函式 shell_exec() 相同。反引號位於鍵盤的”~“鍵那裡。例如:
2 $out=`dir c:`;
3 echo `<pre>`.$out.`</pre>`;
4 ?>
結果為:
Volume Serial Number is A019–7D77
Directory of C
: 02/24/2006 10:21 PM Downloads02/24/2006 10:09 PM Kingsoft Temp Download
05/13/2006 07:07 PM 220 cmd.txt
02/13/2006 11:40 PM WINDOWS
02/13/2006 11:47 PM Documents and Settings
02/13/2006 11:57 PM Program Files
06/24/2006 11:01 PM 482,933 nfzmLog.log
05/11/2006 10:28 PM Inetpub
05/13/2006 07:07 PM 4 response.txt
07/29/2006 05:56 PM 0 Rec.pcm
06/24/2006 09:05 PM nf
07/29/2006 05:56 PM 0 WriteAudrv.wav
07/04/2006 08:52 PM dwnSetup
07/08/2006 09:28 AM TEMP
02/14/2006 12:15 AM NVIDIA
5 File(s) 483,157 bytes 10 Dir(s) 2,116,558,848 bytes free
-
遞增/遞減運算子
PHP 支援 C 風格的前/後遞增與遞減運算子。
注:
遞增/遞減運算子不影響布林值。遞減
NULL 值也沒有效果,但是遞增 NULL 的結果是 1。遞增/遞減運算子
例子 名稱 效果 ++$a 前加 $a 的值加一,然後返回 $a。 $a++ 後加 返回 $a,然後將 $a 的值加一。 –$a 前減 $a 的值減一, 然後返回 $a。 $a– 後減 返回 $a,然後將 $a 的值減 -
型別運算子
PHP 有一個型別運算子:instanceof。instanceof
用來測定一個給定的物件是否來自指定的物件類。instanceof 運算子是 PHP 5 引進的。在此之前用
is_a(),但是
is_a() 已經過時了,最好用 instanceof。
C#裡是is,而Java是instanceof,和PHP一樣。例如:
2 class A { }
3 class B { }
4
5 $thing = new A;
6
7 if ($thing instanceof A) {
8 echo `A`;
9 }
10 if ($thing instanceof B) {
11 echo `B`;
12 }
13 ?>
- 字元運算子
有兩個字串運算子。第一個是連線運算子(“.”),它返回其左右引數連線後的字串。第二個是連線賦值運算子(“.=”),它將右邊引數附加到左邊的引數後。這些在前面已經見到,就不舉例了。
相關文章
- php運算子 比較運算子 邏輯運算子 三元運算子PHP
- php運算子運用之型別運算子該如何使用PHP型別
- php型別運算子的使用PHP型別
- PHP中的比較運算子PHP
- 自學PHP筆記(五) PHP運算子PHP筆記
- PHP中“==”運算子的安全問題PHP
- PHP8 都有哪些新功能,說說PHP8的新增特性PHP
- PHP4使用者手冊:運算子->字串運算子 (轉)PHP字串
- php運算子優先順序PHP
- php---空合併運算子PHP
- php比較運算子的安全問題PHP
- 運算子 運算子
- MySQL的四種運算子(算術運算子、比較運算子、邏輯運算子和位運算子)MySql
- PHP8 新特徵PHP特徵
- 認識PHP8PHP
- php8新特性PHP
- 8.Golang中的運算子-算術運算子、關係運算子、邏輯運算子、賦值運算子Golang賦值
- PHP比較運算子的詳細學習PHP
- php算術運算子怎麼使用?PHP
- PHP7 ?? 與 ?: 的作用和區別(null合併運算子, null條件運算子)PHPNull
- 運算子的關係,什麼叫一元運算子,二元運算子,三元運算子,運算子優先順序,以及運算子的
- javascript中&&運算子和||運算子的使用JavaScript
- 算術運算子裡的特殊運算子
- 運算子-賦值運算子賦值
- php遞增和遞減運算子的介紹PHP
- PHP基礎教程-17 布林運算子PHP
- PHP基礎教程-10 算術運算子PHP
- PHP開發之運算子使用介紹PHP
- javascript運算子——邏輯運算子JavaScript
- javascript基礎(賦值運算子,關係運算子,相等運算子,三元運算子,運算子的優先順序,程式碼塊)(十)JavaScript賦值
- PHP8 新特性實踐PHP
- PHP8 之 mini-laravelPHPLaravel
- php7中的三元運算子的區別PHP
- PHP入門之型別與運算子(一)PHP型別
- PHP基礎教程-16 字串連線運算子PHP字串
- Java的運算子Java
- 運算子
- 剩餘運算子與展開運算子的區別