PHP表達(dá)式中含『++』或『--』時(shí),變量賦值的時(shí)機(jī)

來(lái)源

運(yùn)算符優(yōu)先級(jí) Example #2 Undefined order of evaluation

原文

Operator precedence and associativity only determine how expressions are grouped, they do not specify an order of evaluation. PHP does not (in the general case) specify in which order an expression is evaluated and code that assumes a specific order of evaluation should be avoided, because the behavior can change between versions of PHP or depending on the surrounding code.

Example #2 Undefined order of evaluation

<?php
$a = 1;
echo $a + $a++; // may print either 2 or 3

$i = 1;
$array[$i] = $i++; // may set either index 1 or 2
?>

翻譯

運(yùn)算符的優(yōu)先級(jí)和結(jié)合性可以用來(lái)幫我們對(duì)一個(gè)表達(dá)式進(jìn)行拆解,但不指定賦值順序。一般情況下,PHP不指定求值表達(dá)式的順序。我們也應(yīng)該避免使用這種基于特定求值順序的代碼。因?yàn)榛诓煌腜HP版本或關(guān)聯(lián)代碼,可能會(huì)有不同的產(chǎn)生不同的行為。

再解釋

  1. 不同PHP版本在線測(cè)試工具 中,可以測(cè)試得到『$a + $a++』在 5.0.5 及以下版本中結(jié)果為 2,更高版本中,結(jié)果為 3 。
  2. 『++』的優(yōu)先級(jí)是高于『+』,這是毋庸置疑的;而根據(jù)『++』的定義,$a 應(yīng)該是使用了原值,再進(jìn)行『++』操作。
  3. 那么,要對(duì)『$a + $a++』的結(jié)果為2或3做解釋,只有這樣:

整個(gè)表達(dá)式結(jié)果為2:第一、二個(gè)$a值均為1,得到表達(dá)式結(jié)果為2;再$a++。
整個(gè)表達(dá)式結(jié)果為3:第二個(gè)$a值為1;$a++,$a值變?yōu)?;第一個(gè)$a值為2。

總結(jié)

PHP語(yǔ)言在設(shè)計(jì)時(shí),沒(méi)有考慮過(guò)『++』或『--』運(yùn)算符同『表達(dá)式求值』完全分離(比如說(shuō)『++』在變量后的話,就在整個(gè)表達(dá)式得到值(過(guò)程中忽略自增)后,再自增),不同PHP版本存在不同的實(shí)現(xiàn)策略,導(dǎo)致同一個(gè)表達(dá)式可能會(huì)有不同的值。

實(shí)際開發(fā)中,表達(dá)式中如果使用了『++』或『--』,那么對(duì)應(yīng)的變量在該表達(dá)式中不應(yīng)該出現(xiàn)大于1次。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,533評(píng)論 19 139
  • Spark SQL, DataFrames and Datasets Guide Overview SQL Dat...
    Joyyx閱讀 8,479評(píng)論 0 16
  • 時(shí)光經(jīng)不住歲月的稱量,香樟樹下奔跑的光陰,仿似白駒過(guò)隙。 跳動(dòng)在書窗下的朗朗讀書聲,讓我回憶起剛進(jìn)學(xué)校的自己,青春...
    沐天晴閱讀 795評(píng)論 8 16
  • 周小君0211閱讀 93評(píng)論 0 0
  • 這一晚,終于讀完了柴靜的《看見(jiàn)》。還記得是高中吧!第一次翻開這本書,便被吸引住了,真正的感覺(jué)到,我走進(jìn)了他的世界...
    林軒一諾閱讀 90評(píng)論 0 1

友情鏈接更多精彩內(nèi)容