簡體   English   中英

為什么$ x = 5; $ X +++ $ X ++; 在PHP中等於11?

[英]Why $x=5; $x+++$x++; equals with 11 in PHP?

根據操作碼它應該是12.我錯了嗎?

number of ops:  8
compiled vars:  !0 = $x
line    #* E I O op                  fetch      ext   return  operands
-------------------------------------------------------------------------
  3     0  E >   EXT_STMT                                                 
        1        ASSIGN                                         !0, 5
  5     2        EXT_STMT                                                 
        3        POST_INC                               ~2      !0
        4        POST_INC                               ~3      !0
        5        ADD                                    ~4      ~2, ~3
        6        ECHO                                           ~4
  7     7      > RETURN                                         1

branch: #  0; line:     3-    7; sop:     0; eop:     7; out1:  -2
path #1: 0,

編輯

另外($ x ++)+($ x ++); 返回相同的結果(11)。 實際上,這是問題和操作碼調查的主要原因。

它花了我一些讀數,但$x=5; $x++ + $x++; $x=5; $x++ + $x++; 像這樣工作:

在$ x ++的情況下,它首先“被使用”,然后增加:

  • 將$ x設置為5
  • 將$ x放到堆棧上(這是5)
  • 增量( ++ )($ x現在是6,stack = [ 5 ])
  • 添加$ X到棧(stack = [5,6],因此5 + 6 - > $ X = 11)
  • 添加完成后,結果為11
  • 增量$ x( ++ )(不再使用,但$ x現在為7)

實際上,在這個具體的例子中,如果你要echo $x; 它會輸出7.你永遠不會將值重新分配給$ x,所以$ x = 7(你增加了兩次);

$x = 5;
$a = $x++ + $x++;

表達式行將像這樣執行:語句中第一次出現$x++會將$x值增加1,因此它將變為6並且

在第二次出現時, $x將具有值6;

所以$ a = 5 + 6;

所以最終結果$a將是11。

++具有比+運算符更高的優先級

(x ++)將首先返回x的值,然后將其遞增1

$x = 2
$x++ // return 2, then increment it to 3

x +++ x ++的評估方式如下

1. Get x value first which is 5
2. Then it will be incremented to 6
3. But first x value will be 5 because (x++) statement will return 5 first then increment the value
4. Then + operator is encountered
5. Next x will have 6 as value not 7 for the same reason (x++) will return the x value first and then increment it
6. So 5+6 is 11
7..At the end, x value will be 7

($x++)+($x++)

grouping operator ()具有left to right相關性。 首先執行($x++)

$x = 5
($x++) returns 5 and then increment $x by 1. Same as before. 

然后最后($ x ++)執行。 它返回6然后將$ x增加到7

所以返回同樣的5+6 // 11

后增量運算符增加變量,但返回其舊值。

所以$x++相當於:

($temp = $x, $x = $x + 1, $temp)

當你在表達式中執行兩次時,它就像:

echo ($temp1 = $x, $x = $x + 1, $temp1) + ($temp2 = $x, $x = $x + 1, $temp2);

第一部分設置$temp1 = 5並將$x增加到6

第二部分設置$temp2 = 6並將$x增加到7。

然后它執行$temp1 + $temp2並回顯結果,即5 + 6 = 11

您正在使用后增量運算符($ x ++)。 如果要使用遞增的值進行添加,則應使用預增量運算符(++ $ x)。

因此,如果$ x = 5

$x++ + $x++ equals 5+6 = 11
++$x + $x++ equals 6+6 = 12
$x++ + ++$x equals 5+7 = 12
$++x + ++$x equals 6+7 = 13

然而在所有情況下,x等於7。

$x = 5;
echo $x++ + $x++;

打印11作為第一個$ x ++返回5然后在它之后遞增,第二個$ x ++返回6並且唯一的值遞增。 所以實際加法是5 + 6,得到11。

++ $ x + $ x ++將是12

而++ $ x + ++ $ x將是13

當你使用$ x ++ $ x時,只要它的值被使用就得+1,但是將要使用的值是它在增量之前的值,所以當你做的時候:

$ X = 5; $ X +++ $ X ++;

$ x +++ $ x ++是11,但$ x將是7

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM