第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

后增量表現(xiàn)怪異

后增量表現(xiàn)怪異

PHP
喵喵時光機(jī) 2022-07-29 11:02:34
我已將問題縮小到此代碼$a = 3;$a = 3 * $a++;  echo $a; //9$a = 3;$a = $a * $a++;  echo $a; //12這是第一次操作的 VLD 操作碼compiled vars:  !0 = $aline     #* E I O op                           fetch          ext  return  operands-------------------------------------------------------------------------------------   2     0  E >   ASSIGN                                                   !0, 3   3     1        POST_INC                                         ~2      !0         2        MUL                                              ~3      ~2, 3         3        ASSIGN                                                   !0, ~3   4     4        ECHO                                                     !0   5     5      > RETURN                                                   1第二次操作 ($a * $a++)compiled vars:  !0 = $aline     #* E I O op                           fetch          ext  return  operands-------------------------------------------------------------------------------------   2     0  E >   ASSIGN                                                   !0, 3   3     1        POST_INC                                         ~2      !0         2        MUL                                              ~3      !0, ~2         3        ASSIGN                                                   !0, ~3   4     4        ECHO                                                     !0   5     5      > RETURN                                                   12個問題:為什么先執(zhí)行后增量?這對我來說沒有任何意義。傳統(tǒng)上,我認(rèn)為它會在執(zhí)行表達(dá)式中的所有其他操作后增加變量。這也是 PHP 官方網(wǎng)站上所說的。因此,按照我的邏輯(這可能存在難以置信的缺陷),兩個表達(dá)式都將返回 10。但正如我們所看到的,POST_INC 是在執(zhí)行其他任何操作之前執(zhí)行的。正如我們所看到的,在MUL操作期間,對于第一種情況,~2應(yīng)該是 POST_INC 的結(jié)果(所以值應(yīng)該是 4),然后乘以 3 是 12。但在第二種情況下,!0仍然是3, ~2似乎也持有3的值,原因我不知道,所以我們最終得到 9。為什么會這樣?我不流利地閱讀操作碼,所以也許我錯過了一些東西,我猜操作數(shù)的順序~2, 3 vs !0, ~2很重要,但我不明白怎么做。
查看完整描述

1 回答

?
郎朗坤

TA貢獻(xiàn)1921條經(jīng)驗(yàn) 獲得超9個贊

這里的關(guān)鍵角色是運(yùn)算符優(yōu)先級,因此,盡管是表達(dá)式中的最后一個元素,但首先$a++計算(在 ie 之前)。請注意,其中的意思是對該表達(dá)式(變量)的操作后評估,而不是對整個表達(dá)式(代碼行)的評估。$apostpost increment


在您的第一種情況下,代碼是這樣的:


$result = 3 * $a++;

所以$a用于乘法的值是3因?yàn)樗窍茸x取然后遞增的。該表達(dá)式中不再$a使用,因此新值 of$a并不重要,除非$a再次引用,否則不會影響我們:


     $a = 3

$result = 3 * $a++

        = 3 * 3 

                // $a is 4 now

        = 9

第二種情況不同:


$result = $a * $a++;

因?yàn)槲覀儗?a. 評估將是這樣的:


     $a = 3

$result = $a * $a++

        = $a * 3  // value of `$a` is 4 after post-increment

                  // evaluation, and this affects us as we 

                  // evaluate $a again

        = 4 * 3

        = 12

為了答案的完整性,讓我們再添加一個案例:


$result = $a++ * $a++;

評估將類似地進(jìn)行,$a最后具有不同的價值:


     $a = 3

$result = $a++ * $a++

         // $a is 4 now

        = 3 * $a++

        = 3 * 4

                 // $a is 5 now

        = 12

一旦你理解了這一點(diǎn),這看起來很清楚,但另一方面很好地展示了你可以通過編寫你認(rèn)為你知道它是如何工作的代碼而不是它的實(shí)際工作原理來輕松地超越自己 :) 所以你要么需要仔細(xì)閱讀語言文檔以確保您確定自己編寫的代碼會做什么,或者在未來的調(diào)試會話中為了個人理智而避免編寫過于“聰明”的代碼:) KISS原則的存在是有原因的。


查看完整回答
反對 回復(fù) 2022-07-29
  • 1 回答
  • 0 關(guān)注
  • 107 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號