PHP 入門指南 - 運算式與陳述

運算式 (expression) 由運算元 (operand) 與運算子 (operator) 所組成,依運算元的數量,運算式可以簡單分為下列三種




綠色框框為單一個運算元,紅色框框為兩個運算元,藍色框框為三個運算元。


單一運算元就構成一個運算式,運算元可以是變數 (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 變成 FalseFalse 變成 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 則留言:

Unknown 提到...

$d = --$a; // $b 會等於 4
$e = $a--; // $e 會等於 4
似乎打錯囉

應該是
$d = --$a; // $d 會等於 2
$e = $a--; // $e 會等於 2
才對吧 :D?

Unknown 提到...

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

Unknown 提到...

有沒有看的眼花撩亂?居然有 $f = $a != $b 之類的式子出來...

這段是不是應該放在 相等性及關係運算子 的範例結束之後比較好?
放在 指派運算子 的範例結束後好像有點怪怪的

Kaiching Chang 提到...

$d = --$a; // $b 會等於 4

這地方註解的 $b 應是 $d ,已修正,至於

$a /= 44; // $a 會等於 5

這裡 $a 應是 5.5 ,已修正,其他計算結果並無錯誤唷!

Unknown 提到...

阿阿 真是抱歉
我漏看了
$a += 33; // $a 會等於 44
這行~"~