區別:傳值是將原變數內容複製下來,再用一個新的記憶體空間來保存,兩個變數之間相互獨立,修改其中一個變數不會影響另一個變數。而傳址(引用傳遞)相當於為目前變數取了一個別名,實際上這兩個變數引用的是一個值,修改其中一個變數會影響另一個變數。
本教學操作環境:windows7系統、PHP7.1版、DELL G3電腦
值傳遞
#值傳遞是PHP 中函數的預設傳值方式,也稱為「拷貝傳值」。顧名思義值傳遞的方式會將實參的值複製一份再傳遞給函數的形參,所以在函數中操作參數的值並不會對函數外的實參造成影響。因此如果不希望函數修改實參的值,就可以透過值傳遞的方式。
【範例】下面定義一個簡單的函數,函數有兩個參數,在函數中交換參數的值。
<?php function swap($a, $b){ echo '函数内,交换前 $a = '.$a.', $b = '.$b.'<br>'; $temp = $a; $a = $b; $b = $temp; echo '函数内,交换后 $a = '.$a.', $b = '.$b.'<br>'; } $x = 5; $y = 7; echo '函数外,交换前 $x = '.$x.', $y = '.$y.'<br>'; swap($x, $y); echo '函数外,交换后 $x = '.$x.', $y = '.$y; ?>
運行結果如下:
函数外,交换前 $x = 5, $y = 7 函数内,交换前 $a = 5, $b = 7 函数内,交换后 $a = 7, $b = 5 函数外,交换后 $x = 5, $y = 7
透過運行結果可以看到,在函數內,數值確實是交換了,而在函數外部,數值卻沒有變化。因此可以說,函數的值傳遞只是傳遞變數的副本。那麼要是想讓函數能夠操作函數外實參的話,就需要使用引用傳遞的方式了。
址傳遞(引用傳遞)
參數的引用傳遞就是把實參的記憶體位址複製一份,然後傳遞給函數的形參,實參和形參都指向同一個記憶體位址,因此函數對形參的操作,會影響到函數外的實參。
依引用傳遞就是將實參的記憶體位址傳遞到函數的形參中。因此實參和形參指向的是同一個記憶體位址。這時在函數內部的所有運算都會影響到函數外實參的值。引用傳遞的方式就是在值傳遞的基礎上加上一個&符號,如下所示:
function name (&参数1, &参数2, ..., &参数3) { ... }
【範例】將上面範例的程式碼略作調整,使用引用傳遞的方式向swap 函數中傳遞參數,程式碼如下所示:
<?php function swap(&$a, &$b){ echo '函数内,交换前 $a = '.$a.', $b = '.$b.'<br>'; $temp = $a; $a = $b; $b = $temp; echo '函数内,交换后 $a = '.$a.', $b = '.$b.'<br>'; } $x = 5; $y = 7; echo '函数外,交换前 $x = '.$x.', $y = '.$y.'<br>'; swap($x, $y); echo '函数外,交换后 $x = '.$x.', $y = '.$y; ?>
運行結果如下:
函数外,交换前 $x = 5, $y = 7 函数内,交换前 $a = 5, $b = 7 函数内,交换后 $a = 7, $b = 5 函数外,交换后 $x = 7, $y = 5
推薦學習:《PHP影片教學》
以上是php中傳值與傳址的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!