《簡明 PHP 教程》05 運算符與表達式

運算符是可以通過給出的一或多個值(用編程行話來說亲桥,表達式)來產生另一個值(因而整個結構成為一個表達式)的東西。

運算符可按照其能接受幾個值來分組。一元運算符只能接受一個值暗甥,例如 !(邏輯取反運算符)或 ++(遞增運算符)。 二元運算符可接受兩個值捉捅,例如熟悉的算術運算符 +(加)和 -(減)撤防,大多數 PHP 運算符都是這種。最后是唯一的三元運算符 ? :棒口,可接受三個值寄月;通常就簡單稱之為“三元運算符”(盡管稱之為條件運算符可能更合適)。

表達式是 PHP 最重要的基石无牵。在 PHP 中漾肮,幾乎所寫的任何東西都是一個表達式。簡單但卻最精確的定義一個表達式的方式就是“任何有值的東西”茎毁。

運算符

接下來我們將簡要了解各類運算符及它們的用法克懊。

要記得你可以隨時在解釋器中對給出的案例里的表達式進行求值。例如要想測試表達式 2+3充岛,則可以使用交互式 PHP 解釋器提示符:

php > echo 2 + 3;
5
php > echo 3 * 5;
15
php > 

下面是可用運算符的速覽:

  • -$a(取反), $a 的負值保檐,-3.14 將輸出一個負數。
  • $a + $b(加法), a 和b 的和崔梗,3 + 5 輸出 8夜只。
  • $a - $b(減法), a 和b 的差,50 - 24 輸出 26蒜魄。
  • $a * $b(乘法), a 和b 的積扔亥,2 * 3 輸出 6场躯。
  • $a / $b(除法), a 除以b 的商,13 / 3 輸出 4.3333333333333旅挤。
  • $a % $b(取模), a 除以b 的余數踢关,13 % 3 輸出 1-25.5 % 2.25 輸出 -1粘茄。
  • $a ** $b(乘方), a 的b 次方签舞,3 ** 4 輸出 81
  • =(賦值)柒瓣,把右邊表達式的值賦給左邊的表達式儒搭,$a = 3 的值是 3。PHP 支持引用賦值芙贫,$var = &$othervar;搂鲫,意味著兩個變量指向了同一個數據。
  • $a & $b(按位與)磺平,將把 a 和b 中都為 1 的位設為 1魂仍。
  • $a | $b(按位或),將把 a 和b 中任何一個為 1 的位設為 1拣挪。
  • $a ^ $b(按位異或)擦酌,將把 a 和b 中一個為 1 另一個為 0 的位設為 1。
  • ~ $a(按位取反)媒吗,將 $a 中為 0 的位設為 1仑氛,反之亦然。
  • $a << $b(左移)闸英,將 a 中的位向左移動b 次(每一次移動都表示“乘以 2”)。
  • $a >> $b(右移)介袜,將 a 中的位向右移動b 次(每一次移動都表示“乘以 2”)甫何。
  • $a == $b(等于),TRUE遇伞,如果類型轉換后 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瓤帚,如果 a 嚴格小于b。
  • $a > $b(大于)涩赢,TRUE缘滥,如果 a 嚴格大于b。
  • $a <= $b(小于等于)谒主,TRUE朝扼,如果 a 小于或者等于b。
  • $a >= $b(大于等于)霎肯,TRUE擎颖,如果 a 大于或者等于b。
  • $a <=> $b(太空船/組合比較)观游,當 a 小于搂捧、等于、大于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脖捻。
  • $a--(后減),返回 a兆衅,然后將a 的值減一地沮。
  • $a and $b(邏輯與),TRUE羡亩,如果 a 和b 都為 TRUE摩疑。
  • $a or $b(邏輯或),TRUE畏铆,如果 a 或b 任一為 TRUE雷袋。
  • $a xor $b(邏輯異或),TRUE辞居,如果 a 或b 任一為 TRUE楷怒,但不同時是。
  • ! $a(邏輯非)瓦灶,TRUE鸠删,如果 $a 不為 TRUE。
  • $a && $b(邏輯與)贼陶,TRUE刃泡,如果 a 和b 都為 TRUE。
  • $a || $b(邏輯或)碉怔,TRUE烘贴,如果 a 或b 任一為 TRUE。
  • .(連接)眨层,返回其左右參數連接后的字符串庙楚。
  • .=(連接賦值),將右邊參數附加到左邊的參數之后趴樱。
  • $a + $b(數組聯(lián)合),a 和b 的聯(lián)合酪捡。
  • $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官扣。
  • instanceof(類型)翅敌,用于確定一個 PHP 變量是否屬于某一類 class 的實例。

除法運算符總是返回浮點數惕蹄。只有在下列情況例外:兩個操作數都是整數(或字符串轉換成的整數)并且正好能整除蚯涮,這時它返回一個整數。

取模運算符的操作數在運算之前都會轉換成整數(除去小數部分)卖陵。

數值運算與賦值的快捷方式

一種比較常見的操作是對一個變量進行一項數學運算并將運算得出的結果返回給這個變量遭顶,因此對于這類運算通常有如下的快捷表達方式:

<?php
$a = 2;
$a = $a * 3;

同樣也可寫作:

<?php
$a = 2;
$a *= 3;

要注意到 變量 = 變量 運算 表達式 會演變成 變量 運算 = 表達式

上述賦值運算將原變量的值拷貝到新變量中(傳值賦值)泪蔫,所以改變其中一個并不影響另一個棒旗。

PHP 也支持引用賦值,使用“var = &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) 的值属百。

總結

我們已經了解了如何使用運算符、操作數與表達式——這些是我們構建任何程序的基本塊变姨。接下來族扰,我們將看到如何在程序中善加利用這些語句。

關注公眾號「展白說」定欧,獲取更多有價值的內容渔呵。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市砍鸠,隨后出現的幾起案子扩氢,更是在濱河造成了極大的恐慌,老刑警劉巖爷辱,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件录豺,死亡現場離奇詭異,居然都是意外死亡饭弓,警方通過查閱死者的電腦和手機双饥,發(fā)現死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弟断,“玉大人咏花,你說我怎么就攤上這事》浚” “怎么了昏翰?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長刘急。 經常有香客問我矩父,道長,這世上最難降的妖魔是什么排霉? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上攻柠,老公的妹妹穿的比我還像新娘球订。我一直安慰自己,他們只是感情好瑰钮,可當我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布冒滩。 她就那樣靜靜地躺著,像睡著了一般浪谴。 火紅的嫁衣襯著肌膚如雪开睡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天苟耻,我揣著相機與錄音篇恒,去河邊找鬼。 笑死凶杖,一個胖子當著我的面吹牛胁艰,可吹牛的內容都是我干的。 我是一名探鬼主播智蝠,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼腾么,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了杈湾?” 一聲冷哼從身側響起解虱,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎漆撞,沒想到半個月后殴泰,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡叫挟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年艰匙,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抹恳。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡员凝,死狀恐怖,靈堂內的尸體忽然破棺而出奋献,到底是詐尸還是另有隱情健霹,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布瓶蚂,位于F島的核電站糖埋,受9級特大地震影響,放射性物質發(fā)生泄漏窃这。R本人自食惡果不足惜瞳别,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧祟敛,春花似錦疤坝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至埠巨,卻和暖如春历谍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背辣垒。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工望侈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人乍构。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓甜无,卻偏偏與公主長得像,于是被迫代替她去往敵國和親哥遮。 傳聞我的和親對象是個殘疾皇子岂丘,可洞房花燭夜當晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內容

  • 運算符是處理數據的基本方法,用來從現有的值得到新的值眠饮。JavaScript 提供了多種運算符奥帘,本章逐一介紹這些運算...
    徵羽kid閱讀 678評論 0 0
  • 表達式和運算符 程序中最簡單的表達式就是,程序中的常量 變量名也是一種簡單的表達式 復雜的表達式是由簡單的表達式組...
    zhaolion閱讀 1,633評論 3 12
  • PHP 的運算符仪召,它包含算術運算符寨蹋、賦值運算符、位運算符扔茅、比較運算符已旧、執(zhí)行運算符、遞增遞減運算符召娜、邏輯運算符运褪、字符...
    三生石的等待閱讀 362評論 0 0
  • 接著之前的知識點,繼續(xù)學習js.還是一如既往的在簡書上求個贊~ 表達式呢玖瘸,它是JavaScript的一個短語秸讹,js...
    我就是z閱讀 643評論 3 2
  • 一、Python簡介和環(huán)境搭建以及pip的安裝 4課時實驗課主要內容 【Python簡介】: Python 是一個...
    _小老虎_閱讀 5,744評論 0 10