運算符是可以通過給出的一或多個值(用編程行話來說亲桥,表達式)來產生另一個值(因而整個結構成為一個表達式)的東西。
運算符可按照其能接受幾個值來分組。一元運算符只能接受一個值暗甥,例如 !(邏輯取反運算符)或 ++(遞增運算符)。 二元運算符可接受兩個值捉捅,例如熟悉的算術運算符 +(加)和 -(減)撤防,大多數 PHP 運算符都是這種。最后是唯一的三元運算符 ? :棒口,可接受三個值寄月;通常就簡單稱之為“三元運算符”(盡管稱之為條件運算符可能更合適)。
表達式是 PHP 最重要的基石无牵。在 PHP 中漾肮,幾乎所寫的任何東西都是一個表達式。簡單但卻最精確的定義一個表達式的方式就是“任何有值的東西”茎毁。
運算符
接下來我們將簡要了解各類運算符及它們的用法克懊。
要記得你可以隨時在解釋器中對給出的案例里的表達式進行求值。例如要想測試表達式 2+3充岛,則可以使用交互式 PHP 解釋器提示符:
php > echo 2 + 3;
5
php > echo 3 * 5;
15
php >
下面是可用運算符的速覽:
-
-$a
(取反), $a 的負值保檐,-3.14
將輸出一個負數。 -
$a + $b
(加法), b 的和崔梗,3 + 5
輸出8
夜只。 -
$a - $b
(減法), b 的差,50 - 24
輸出26
蒜魄。 -
$a * $b
(乘法), b 的積扔亥,2 * 3
輸出6
场躯。 -
$a / $b
(除法), b 的商,13 / 3
輸出4.3333333333333
旅挤。 -
$a % $b
(取模), b 的余數踢关,13 % 3
輸出1
,-25.5 % 2.25
輸出-1
粘茄。 -
$a ** $b
(乘方), b 次方签舞,3 ** 4
輸出81
。 -
=
(賦值)柒瓣,把右邊表達式的值賦給左邊的表達式儒搭,$a = 3
的值是3
。PHP 支持引用賦值芙贫,$var = &$othervar;
搂鲫,意味著兩個變量指向了同一個數據。 -
$a & $b
(按位與)磺平,將把 b 中都為 1 的位設為 1魂仍。 -
$a | $b
(按位或),將把 b 中任何一個為 1 的位設為 1拣挪。 -
$a ^ $b
(按位異或)擦酌,將把 b 中一個為 1 另一個為 0 的位設為 1。 -
~ $a
(按位取反)媒吗,將 $a 中為 0 的位設為 1仑氛,反之亦然。 -
$a << $b
(左移)闸英,將 b 次(每一次移動都表示“乘以 2”)。 -
$a >> $b
(右移)介袜,將 b 次(每一次移動都表示“乘以 2”)甫何。 -
$a == $b
(等于),TRUE遇伞,如果類型轉換后 b辙喂。 -
$a === $b
(全等),TRUE鸠珠,如果 b巍耗,并且它們的類型也相同。 -
$a != $b
(不等)渐排,TRUE炬太,如果類型轉換后 b。 -
$a <> $b
(不等)驯耻,TRUE亲族,如果類型轉換后 b炒考。 -
$a !== $b
(不全等),TRUE霎迫,如果 b斋枢,或者它們的類型不同。 -
$a < $b
(小于)知给,TRUE瓤帚,如果 b。 -
$a > $b
(大于)涩赢,TRUE缘滥,如果 b。 -
$a <= $b
(小于等于)谒主,TRUE朝扼,如果 b。 -
$a >= $b
(大于等于)霎肯,TRUE擎颖,如果 b。 -
$a <=> $b
(太空船/組合比較)观游,當 b 時 分別返回一個小于懂缕、等于允跑、大于 0 的 integer 值。 PHP7 開始提供搪柑。 -
$a ?? $b ?? $c
(NULL 合并操作符)聋丝,從左往右第一個存在且不為 NULL 的操作數。如果都沒有定義且不為 NULL工碾,則返回 NULL弱睦。PHP7 開始提供。 -
@
(錯誤控制)渊额,當將其放置在一個 PHP 表達式之前况木,該表達式可能產生的任何錯誤信息都被忽略掉。 - ``(執(zhí)行)旬迹,PHP 將嘗試將反引號中的內容作為 shell 命令來執(zhí)行火惊,并將其輸出信息返回。
-
++$a
(前加)奔垦,a。 -
$a++
(后加)宴倍,返回 a 的值加一仓技。 -
--$a
(前減),a脖捻。 -
$a--
(后減),返回 a 的值減一地沮。 -
$a and $b
(邏輯與),TRUE羡亩,如果 b 都為 TRUE摩疑。 -
$a or $b
(邏輯或),TRUE畏铆,如果 b 任一為 TRUE雷袋。 -
$a xor $b
(邏輯異或),TRUE辞居,如果 b 任一為 TRUE楷怒,但不同時是。 -
! $a
(邏輯非)瓦灶,TRUE鸠删,如果 $a 不為 TRUE。 -
$a && $b
(邏輯與)贼陶,TRUE刃泡,如果 b 都為 TRUE。 -
$a || $b
(邏輯或)碉怔,TRUE烘贴,如果 b 任一為 TRUE。 -
.
(連接)眨层,返回其左右參數連接后的字符串庙楚。 -
.=
(連接賦值),將右邊參數附加到左邊的參數之后趴樱。 -
$a + $b
(數組聯(lián)合),b 的聯(lián)合酪捡。 -
$a == $b
(數組相等)叁征,如果 b 具有相同的鍵/值對則為 TRUE。 -
$a === $b
(數組全等)逛薇,如果 b 具有相同的鍵/值對并且順序和類型都相同則為 TRUE捺疼。 -
$a != $b
(數組不等),如果 b 則為 TRUE永罚。 -
$a <> $b
(數組不等)啤呼,如果 b 則為 TRUE卧秘。 -
$a !== $b
(數組不全等),如果 b 則為 TRUE官扣。 -
instanceof
(類型)翅敌,用于確定一個 PHP 變量是否屬于某一類 class 的實例。
除法運算符總是返回浮點數惕蹄。只有在下列情況例外:兩個操作數都是整數(或字符串轉換成的整數)并且正好能整除蚯涮,這時它返回一個整數。
取模運算符的操作數在運算之前都會轉換成整數(除去小數部分)卖陵。
數值運算與賦值的快捷方式
一種比較常見的操作是對一個變量進行一項數學運算并將運算得出的結果返回給這個變量遭顶,因此對于這類運算通常有如下的快捷表達方式:
<?php
$a = 2;
$a = $a * 3;
同樣也可寫作:
<?php
$a = 2;
$a *= 3;
要注意到 變量 = 變量 運算 表達式
會演變成 變量 運算 = 表達式
。
上述賦值運算將原變量的值拷貝到新變量中(傳值賦值)泪蔫,所以改變其中一個并不影響另一個棒旗。
PHP 也支持引用賦值,使用“othervar;”語法撩荣。引用賦值意味著兩個變量指向了同一個數據铣揉,沒有拷貝任何東西。
求值順序
如果你有一個諸如 2 + 3 * 4
的表達式婿滓,是優(yōu)先完成加法還是優(yōu)先完成乘法呢老速?我們的高中數學知識會告訴我們應該先完成乘法。這意味著乘法運算符的優(yōu)先級要高于加法運算符凸主。
下面將給出 PHP 中從最低優(yōu)先級(最少綁定)到最高優(yōu)先級(最多綁定)的優(yōu)先級表橘券。這意味著,在給定的表達式中卿吐,PHP 將優(yōu)先計算表中位列于后的較高優(yōu)先級的運算符與表達式旁舰。
為了保持完整,下表是從 PHP 參考手冊 中引用而來嗡官。你最好使用圓括號操作符來對運算符與操作數進行分組箭窜,以更加明確地指定優(yōu)先級。這也能使得程序更加可讀衍腥。你可以閱讀改變運算順序來了解更多的細節(jié)磺樱。
改變運算順序 {#changing-order-of-evaluation}
為了使表達式更加易讀,我們可以使用括號婆咸。舉個例子竹捉,2 + (3 * 4)
自是要比 2 + 3 * 4
要更加容易理解,因為后者還要求你了解運算符的優(yōu)先級尚骄。使用括號要適度块差,同時不要像 (2 + (3 * 4))
這樣冗余。
使用括號還有一個額外的優(yōu)點——它能幫助我們改變運算的順序。同樣舉個例子憨闰,如果你希望在表達式中計算乘法之前應先計算加法状蜗,那么你可以將表達式寫作 (2 + 3) * 4
。
結合性
運算符通常由左至右結合鹉动。這意味著具有相同優(yōu)先級的運算符將從左至右的方式依次進行求值轧坎。如 2 + 3 + 4
將會以 (2 + 3) + 4
的形式加以計算。
表達式
案例(將其保存為 expression.php
)
<?php
$length = 5;
$breadth = 2;
$area = $length * $breadth;
echo 'Area is ' . $area . "\n";
echo 'Perimeter is ' . 2 * ($length + $breadth) . "\n";
輸出:
$ php expression.php
Area is 10
Perimeter is 14
它是如何工作的
矩形的長度(Length)與寬度(Breadth)存儲在以各自名稱命名的變量中训裆。我們使用它們并借助表達式來計算矩形的面積(Area)與周長(Perimeter)眶根。我們將表達式 $length * $breadth
的結果存儲在變量 $area
中并將其通過使用 echo
函數打印出來。在第二種情況中边琉,我們直接在 echo
函數中使用了表達式 2 * ($length + $breadth)
的值属百。
總結
我們已經了解了如何使用運算符、操作數與表達式——這些是我們構建任何程序的基本塊变姨。接下來族扰,我們將看到如何在程序中善加利用這些語句。
關注公眾號「展白說」定欧,獲取更多有價值的內容渔呵。