php - &符號引用傳遞會對運算結果有何影響?
PHP中文网
PHP中文网 2017-06-21 10:10:41
0
3
707

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

PHP中文网
PHP中文网

认证高级PHP讲师

全部回覆(3)
typecho

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

$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

phpcn_u1582

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

学习ing

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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板