PHP中值傳遞和引用傳遞的區別
#變數傳值是指:將一個變數的值“傳遞”給另一個變數。
有且只有兩種傳遞資料的方式:值傳遞和引用傳遞。 php預設的一般情況下,都使用的是值傳遞。
下面讓我們一起來看看這兩種傳遞方式到底有哪些不同:
值傳遞:
就是將右邊變數的「資料值」本身,複製一份,然後賦值給左邊變數
值傳遞(passl-by-value)過程中,被調函數的形式參數作為被調函數的局部變數處理,即在堆疊中開闢了記憶體空間以存放由主調函數放進來的實參的值,從而成為了實參的一個副本。值傳遞的特徵是被調函數對形式參數的任何操作都是作為局部變數進行,不會影響主調函數的實參變數的值。
舉例:
$v1 = 1; $v2 = $v1;
值傳遞後,兩個變數是互不影響的,互相獨立
<?php //值传递 $v1 = 10; $v2 = $v1; echo "v2的值为:".$v2;//10 $v1 = 11; echo "<br>v2的值为:".$v2;//10
##引用傳遞:
是將右邊變數對資料的參考關係,傳給左邊的變數引用傳遞(pass-by-reference)過程中,被調函數的形式參數雖然也作為局部變數在堆疊中開啟了記憶體空間,但是這時存放的是由主調函數放進來的實參變數的位址。被調函數對形參的任何操作都被處理成間接定址,即透過堆疊中存放的位址存取主調函數中的實參變數。正因為如此,被調函數對形參做的任何操作都影響了主調函數中的。<?php //引用传递 $v1 = 10; $v2 = &$v1; echo "v2的值为:".$v2;//10 $v1 = 11; echo "<br>v2的值为:".$v2;//11
#總結:
#這裡主要考察的就是類似傳值,傳引用的問題。了解到傳值是重新開啟記憶體空間,相當於把原值複製一份,和原值是彼此獨立的。傳引用(指標)只是在原始記憶體區塊加了個指向,引用的值變了,就修改了指向的記憶體位址值,所有指向的引用全部變了。
以上是PHP兩種傳值方式,值傳遞與引用傳遞的詳細內容。更多資訊請關注PHP中文網其他相關文章!