綠色框框為單一個運算元,紅色框框為兩個運算元,藍色框框為三個運算元。
單一運算元就構成一個運算式,運算元可以是變數 (variable) 、字面常數 (literal) 或使用當運算子的關鍵字 (keyword) 或呼叫函數 (function) ,例如
$a; // 以變數當運算元 3; // 以字面常數當運算元 echo "\n"; // 使用關鍵字
運算式,顧名思義,其為運算出一個結果的式子,因此單一運算元的運算式所得到的結果就是運算元的值,如果是函數方法呼叫,就是函數的回傳值 (return value) 囉!
單一運算元也可以結合單元運算子,單元運算子有
運算子 | 功能 | 範例 |
---|---|---|
+ | 正 | +$a |
- | 負 | -$a |
++ | 遞增 | ++$a, $a++ |
-- | 遞減 | --$a, $a-- |
! | 邏輯補數運算子 | !$a |
正負如果一般數學表示正負值一樣,同樣的,負負會得正
$a = -3; $b = +$a; // $b 會等於 -3 $c = -$a; // $c 會等於 3
遞增、遞減則是會將整數變數遞增 1 或遞減 1 ,有前後之別
$a = 3; $b = ++$a; // $b 會等於 4 $c = $a++; // $c 會等於 4 $d = --$a; // $d 會等於 4 $e = $a--; // $e 會等於 4
邏輯補數運算子會把 True 變成 False , False 變成 True
$a = True; $b = !$a; // $b 會等於 False $c = !$b; // $c 會等於 True
一般運算子都須結合兩個運算元,例如算術運算子 (arithmetic operator) ,可用在整數 (integer) 及浮點數 (floating-point number) ,計算結果也為整數或浮點數
運算子 | 功能 | 範例 |
---|---|---|
+ | 加 | $a + $b |
- | 減 | $a - $b |
* | 乘 | $a * $b |
/ | 除 | $a / $b |
% | 取餘數 | $a % $b |
例如
$a = 11; $b = $a + 33; // $b 會等於 44 $c = $b - 22; // $c 會等於 22 $d = $c * 11; // $d 會等於 242 $e = $d / 44; // $e 會等於 5.5 $f = $e % 55; // $f 會等於 5
相等性及關係運算子 (equality and relational operator) ,可用於整數及浮點數或布林值 (Boolean value) ,計算結果不是 True 就是 False
運算子 | 功能 | 範例 |
---|---|---|
== | 相等 | $a == $b |
!= | 不相等 | $a != $b |
> | 大於 | $a >= $b |
>= | 大於等於 | $a >= $b |
< | 小於 | $a < $b |
<= | 小於等於 | $a <= $b |
例如
$a = 11; $b = 22; $c = $a >= $b; // $c 會等於 False $d = $a <= $b; // $d 會等於 True $e = $c == $d; // $e 會等於 False $f = $a != $b; // $f 會等於 True
我們運用的等號,其實屬於指派運算子 (assignment operator) ,所謂的指派是把等號右邊的值給左邊的變數
運算子 | 功能 | 範例 |
---|---|---|
= | 指派 | $a = $b |
+= | 相加同時指派 | $a += $b |
-= | 相減同時指派 | $a -= $b |
*= | 相乘同時指派 | $a *= $b |
/= | 相除同時指派 | $a /= $b |
%= | 取餘數同時指派 | $a %= $b |
例如
$a = 11; $a += 33; // $a 會等於 44 $a -= 22; // $a 會等於 22 $a *= 11; // $a 會等於 242 $a /= 44; // $a 會等於 5.5 $a %= 55; // $a 會等於 5
有沒有看的眼花撩亂?居然有 $f = $a != $b 之類的式子出來,這是因為運算子有計算的優先次序 (precedence) ,由於 != 的優先順序在 = 之前,所以 $a != $b 會先被計算,結果才會指派到 $f 之中。如果不是很清楚各個運算子的優先次序,保險一點的做法可以用小括弧,先把要先被計算的運算式圍起來,例如
$f = ($a != $b); // 等於 $f = $a != $b
這是因為小括弧有最高的優先計算次序。
加上分號,運算式就是程式 (program) 中獨立的陳述 (statement) 。 PHP 程式的執行單位就是陳述,由前而後,一個陳述接著一個陳述來執行。
陳述也有好幾種,最簡單的陳述就是單一個分號
; // 什麼事也不做的陳述
其他很多都是連帶運算式單獨一行的陳述,然而許多控制結構 (control structure) 是屬於多行的複合陳述 (compound statement) ,我們先來看看控制結構中的選擇吧!
中英文術語對照 | |
---|---|
運算式 | expression |
運算元 | operand |
運算子 | operator |
變數 | variable |
字面常數 | literal |
方法呼叫 | method invocation |
回傳值 | return value |
算術運算子 | arithmetic operator |
整數 | integer |
浮點數 | floating-point number |
相等性及關係運算子 | equality and relational operator |
布林值 | Boolean value |
指派運算子 | assignment operator |
物件 | object |
參考 | reference |
計算優先次序 | precedence |
程式 | program |
陳述 | statement |
類別 | class |
方法 | method |
控制結構 | control structure |
複合陳述 | compound statement |
您可以繼續參考
基礎篇
相關目錄
回 PHP 入門指南
回 PHP 教材
回首頁
參考資料
http://php.net/manual/en/language.expressions.php
http://www.php.net/manual/en/language.operators.php
http://www.php.net/manual/en/language.operators.precedence.php
http://www.php.net/manual/en/language.operators.arithmetic.php
http://www.php.net/manual/en/language.operators.assignment.php
http://www.php.net/manual/en/language.operators.comparison.php
http://www.php.net/manual/en/language.operators.errorcontrol.php
http://www.php.net/manual/en/language.operators.execution.php
http://www.php.net/manual/en/language.operators.increment.php
http://www.php.net/manual/en/language.operators.logical.php
http://www.php.net/manual/en/language.operators.string.php
http://www.php.net/manual/en/language.operators.array.php
http://www.php.net/manual/en/language.operators.type.php
本文於 2013 年 2 月修正
5 則留言:
$d = --$a; // $b 會等於 4
$e = $a--; // $e 會等於 4
似乎打錯囉
應該是
$d = --$a; // $d 會等於 2
$e = $a--; // $e 會等於 2
才對吧 :D?
$a = 11;
$a -= 22; // $a 會等於 22
$a /= 44; // $a 會等於 5
$a %= 55; // $a 會等於 5
似乎有錯噢
應該是
$a -= 22; // $a 會等於 -11
$a /= 44; // $a 會等於 0.25
$a %= 55; // $a 會等於 0.2
才對吧?
$a [+,-,*,/,%]= $b
應該和 $a = $a [+,-,*,/,%] $b 等價沒錯吧 :D?
有沒有看的眼花撩亂?居然有 $f = $a != $b 之類的式子出來...
這段是不是應該放在 相等性及關係運算子 的範例結束之後比較好?
放在 指派運算子 的範例結束後好像有點怪怪的
$d = --$a; // $b 會等於 4
這地方註解的 $b 應是 $d ,已修正,至於
$a /= 44; // $a 會等於 5
這裡 $a 應是 5.5 ,已修正,其他計算結果並無錯誤唷!
阿阿 真是抱歉
我漏看了
$a += 33; // $a 會等於 44
這行~"~
張貼留言