PHP 8: PHP的運算子

來源:互聯網
上載者:User
本章將介紹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 中的位向左移動 $b 次(每一次移動都表示“乘以 2” )。

$a >> $b

Shift right(右移)

將 $a 中的位向右移動 $b 次(每一次移動都表示“除以 2” )。

比較子

例子

名稱

結果

$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 具有相同的鍵/值對則為 TRUE。

$a === $b

全等

如果 $a 和 $b 具有相同的鍵/值對並且順序和類型都相同則為 TRUE。

$a != $b

不等

如果 $a 不等於 $b 則為 TRUE。

$a <> $b

不等

如果 $a 不等於 $b 則為 TRUE。

$a !== $b

不全等

如果 $a 不全等於 $b 則為 TRUE。

當然還有幾種類型的沒有列出,將在後面描述。我們先看看列出的吧。
如果沒有對上面的運算子做特殊說明,那麼說明它們和C#裡的相似。
首先看看位元運算裡的左移(<<)或右移(>>),其實沒有什麼不同,只是符號不一樣而已。 看看比較運演算法裡的“==”,“===”,這兩個比較有意思,它們有什麼區別呢? 看看一下代碼:

1 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”後面跟著一個或多個數字。例如:

1 2 $var = 1 + " 10.5 " ;
3 echo " 1 + \ " 10.5 \ " = " . $var . " ; type: " . gettype ( $var ) . "
" ;
4 $var = 1 + " -1.3e3 " ;
5 echo " 1 + \ " - 1.3e3 \ " = " . $var . " ; type: " . gettype ( $var ) . "
" ;
6 $var = 1 + " bob-1.3e3 " ;
7 echo " 1 + \ " bob - 1.3e3 \ " = " . $var . " ; type: " . gettype ( $var ) . "
" ;
8 $var = 1 + " bob3 " ;
9 echo " 1 + \ " bob3\ " = " . $var . " ; type: " . gettype ( $var ) . "
" ;
10 $var = 1 + " 10 beatiful birds " ;
11 echo " 1 + \ " 10 beatiful birds\ " = " . $var . " ; type: " . gettype ( $var ) . "
" ;
12 $var = 4 + " 10.2 Little Apple " ;
13 echo " 4 + \ " 10.2 Little Apple\ " = " . $var . " ; type: " . gettype ( $var ) . "
" ;
14 $var = " 10.0 pigs " + 1 ;
15 echo " \ " 10.0 pigs \ " + 1= " . $var . " ; type: " . gettype ( $var ) . "
" ;
16 $var = " 10.0 pigs " + 1.0 ;
17 echo " \ " 10.0 pigs \ " + 1.0= " . $var . " ; type: " . gettype ( $var ) . "
" ;
18 ?>
19

輸出的結果是:

1 + " 10.5 " = 11.5 ; type : double
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個等於符號,它表示不僅最後轉化的數值相等,而且類型也應該相等。看看下面的代碼:

1 2 var_dump ( 0 === " a " ); // 0 === 0 -> false
3 echo '
' ;
4 var_dump ( 0 === " 00 " ); // 0 === "00" -> false
5 echo '
' ;
6 var_dump ( 0 === 0 ); // 0 === 0 -> true
7 echo '
' ;
8 ?>

輸出結果為:

bool( false )
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() 相同。反引號位於鍵盤的”~“鍵那裡。例如:

1 2 $out = ` dir c : `;
3 echo '

 ' . $out . ' 
' ;
4 ?>

結果為:

Volume in drive C has no label .
Volume Serial Number is A019 - 7D77

Directory of C : \

02 / 24 / 2006 10 : 21 PM Downloads
02 / 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一樣。例如:

1 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 ?>


字元運算子 有兩個字串運算子。第一個是串連運算子(“.”),它返回其左右參數串連後的字串。第二個是串連賦值運算子(“.=”),它將右邊參數附加到左邊的參數後。這些在前面已經見到,就不舉例了。
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.