運算子

概述及用途
    什麼是運算子?(亦稱「運算元」或「運算符號」),舉例說明如下:

「$total = $a + $b;」,其中" $a + $b "稱為「表示式」(expressions),"+" 即稱為運算子(operator)

在PHP的運算子裡,大致歸類下列十種:
  1. 算術運算子
  2. 指定運算子
  3. 位元運算子
  4. 比較運算子
  5. 錯誤控制運算子
  6. 執行運算子
  7. 加一/減一運算子
  8. 邏輯運算子
  9. 字串運算子
  10. 陣列運算子

表列各運算子

1.算術運算子

2.指定運算子( = )

運算子
範例
用途
+
$a + $b
$a 和 $b 的和。
-
$a - $b
$a 和 $b 的差。
*
$a * $b
$a 和 $b 的乘積。
/
$a / $b
$a 除以 $b 的商。
%
$a % $b
$a 除以 $b 的餘數。
標準式
簡單式
$a = $a + $b
$a += $b
$a = $a - $b
$a -= $b
$a = $a * $b
$a *= $b
$a = $a / $b
$a /= $b
$a = $a % $b
$a %= $b

3.位元運算子

範例

各位元執行動作

結果
$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”)。

4.比較運算子

範例
名稱
解釋
$a = = $b
等於
TRUE,如果 $a 等於 $b。
$a = = = $b
全等
TRUE,如果 $a 等於 $b,並且它們的類型也相同。(PHP 4 only)
$a != $b
不等
TRUE,如果 $a 不等於 $b。
$a <> $b
不等
TRUE,如果 $a 不等於 $b。
$a != = $b
非全等
TRUE,如果 $a 不等於 $b,或者它們的類型不同。(PHP 4 only)
$a < $b
小與
TRUE,如果 $a 小於 $b。
$a > $b
大於
TRUE,如果 $a 大於 $b。
$a <= $b
小於等於
TRUE,如果 $a 小於或者等於 $b。
$a >= $b
大於等於
TRUE,如果 $a 大於或者等於 $b。

5.錯誤控制運算子

說明     PHP 支援一個錯誤控制運算符「@」。將其放置在一個 PHP 運算式之前,該運算式可能產生的任何錯誤資訊都被忽略掉。這功能有幾個目的:

安全性:避免因程式上的某些錯誤訊息將一些訊息告知了外界,而暴露系統上可能的安全
                漏洞。
美觀:因為錯誤訊息會造成顯示畫面的混亂。
 
    基本,但這個功能得在安裝PHP時啟動 track_errors 功能(也可事後在php.ini中修改),運算式所產生的任何錯誤資訊才會被存放在總體變數 $php_errormsg 裡,並顯示出來。
使用方式如:
<?php
    $abc @= $abc+123;
    echo "$php_errormsg";
?>

6.執行運算子

說明     PHP 支持一個執行運算符:反引號「` .... `」。注意這不是單引號!PHP 將嘗試將反引號中的內容作為shell命令來執行,並將其輸出資訊返回(例如,可以賦給一個變數),但只能在command文字命令模式下執行,不可透過Web Server執行。
※反引號運算子在啟動了 safe mode 或者關閉了 shell_exec() 時是無效的。
使用方式如:
<?php
 // 列出 example 目錄下的檔案與目錄
 $output = `ls -al example`;
 echo "<pre>$output</pre>";
?>

7.加一 / 減一運算子

範例
名稱
解釋
++$a
前加
$a 的值加一,然後返回 $a。
$a++
後加
返回 $a,然後將 $a 的值加一。
--$a
前減
$a 的值減一, 然後返回 $a。
$a--
後減
返回 $a,然後將 $a 的值減一。
範例 加一 / 減一運算子 顯示結果
<?php
echo "<h3>a++</h3>";
$a = 5;
echo "前a = ".$a."<br>中a = ".$a++."<br>後a = ".$a."<br>";

echo "<h3>++a</h3>";
$a = 5;
echo "前a = ".$a."<br>中a = ".++$a."<br>後a = ".$a."<br>";

echo "<h3>a--</h3>";
$a = 5;
echo "前a = ".$a."<br>中a = ".$a--."<br>後a = ".$a."<br>";

echo "<h3>--a</h3>";
$a = 5;
echo "前a = ".$a."<br>中a = ".--$a."<br>後a = ".$a."<br>";
?>

8.邏輯運算子

範例
名稱
解釋
$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。

9.字串運算子

說明     有兩個字串運算符。第一個是連接運算符(“.”),它返回其左右參數連接後的字串。第二個是連接指定運算子(“.=”),它將右邊參數附加到左邊的參數後方。
範例 字串運算子應用 顯示結果
<?php
$a = "中央大學";
$b = $a . "工學院";
echo $b . "<BR>";

$c = "機械系";
$c .= "網路管理小組";
echo $c;
?>

10.陣列運算子

說明     PHP 僅有的一個陣列運算子是「 +」 運算子。它把右邊的陣列附加到左邊的陣列後方
,但是重複的索引值不會被覆蓋。
範例 陣列運算子應用 顯示結果
<?php
$a = array("一月", "二月", "10"=>"十月");
$b = array("星期一", "星期二", "星期三");
$c = $a + $b;

var_dump($c); // var_dump( ) 是顯示變數內容的函數
?>

運算子優先順序

說明     運算子優先順序指定了兩個運算式綁定得有多“緊密”。例如,運算式 1 + 5 * 3 的結果是 16 而不是 18 是因為乘號(“*”)的優先順序比加號(“+”)高。必要時可以用括弧來強制改變優先順序。例如:(1 + 5) * 3 的值為 18。
下表從低到高列出了運算子的優先順序。
 
優先等級
結合方向
運算子
   低
 
 
 
 
 
 
,
or
xor
and
print
= += -= *= /= .= %= &= |= ^= ~= <<= >>=
? :
||
&&
|
^
&
== != === !==
< <= > >=
<< >>
+ - .
* / %
! ~ ++ -- (int) (float) (string) (array) (object) @
[
new

另提:條件運算子

說明     與許多程式語言一樣,PHP 也可以使用 A ? B : C 形式(A True 則 B 否則 C),其中的 A, B, C 是 expression 形式。實際上這種寫法也可以用 if...else 來取代,但程式就沒那麼精簡了。
 
範例 條件運算子應用 顯示結果
<?php
$a=6;
$b=($a>0)?5:10;
echo $b."<br>";
//另一種寫法
$a=6;
($a>0)?$b=5:$b=10;
echo $b."<br>";
//if...else 寫法
$a=6;
if($a>0)
$b=5;
else
$b=10;
echo $b;
?>