首頁  >  問答  >  主體

php - &符號引用傳遞會對運算結果有何影響?

$a = 1;
$b = &$a; //傳址。註解掉此行回傳5,不註解時(PHP版本<7的)回傳6
$c = ( $a) ( $a);
echo $c;
跟版本有關係嗎?還有就是結果是6啊,百思不得其解啊

PHP中文网PHP中文网2676 天前685

全部回覆(3)我來回復

  • typecho

    typecho2017-06-21 10:12:41

    先說一下加上了引用賦值的操作

    $b = &$a;

    這個操作,可以認為,$a$b都指向原本$a變量所在的那塊內存(為了方便後面解釋,稱為內存X),也就是說,後面任何對於$a$b的操作,都是在直接對這塊記憶體裡的數值進行修改。

    所以加上這一行之後的運作流程:

    1. 前面步驟省略,初始a為1

    2. $c = (++$a) + (++$a)的兩次++$a都是在操作記憶體X,也就是把記憶體X裡的值自增了兩次,所以,在運算$c的值的時候,取的是這個記憶體裡數的值,也就是自增了兩次之後的記憶體X裡的值。所以,是3 + 3 = 6(運算$c時候,記憶體X裡存的值是3)。

    再說一下註解了引用之後的操作

    如果不加引用,那麼對於$a的自增接操作直接修改內存X,而後通過運算符操作返回內存X的副本,這樣,兩次的++$a結果由於不是直接從記憶體X取得的,而是改變記憶體X值之後的副本,所以$c在運算的時候就是2 + 3 = 5

    回覆
    0
  • phpcn_u1582

    phpcn_u15822017-06-21 10:12:41

    這個跟PHP的底層實現有關,說起來很長,推薦看一下github上同樣問題的解析
    一個PHP bug引發的探索:
    https://github.com/xurenlu/ph...

    回覆
    0
  • 学习ing

    学习ing2017-06-21 10:12:41

    你輸出C,C跟你的B有什麼關係?

    回覆
    0
  • 取消回覆