值傳遞:在函數範圍內,改變變數值得大小,都不會影響到函數外邊的變數值。
引用傳遞:在函數範圍內,對值的任何改變,在函數外部也有所體現,因為傳引用傳的是記憶體位址。
敲兩段程式碼然後就可以看出兩者的區別,咱們透過現像看本質
function sum($a){ $a++; $b = $a; return $b; } $a = 10; echo sum($a).'<br />';//11 echo $a;//10
function sum(&$a){ $a++; $b = $a; return $b; } $a = 10; echo sum($a).'<br />';//11 echo $a;//11
兩段程式碼的差異在於函數sum的參數上,一個是傳值$ a,另一個是傳引用&$a,結果是傳值過後$a的值最終沒有改變,反之傳引用過後$a的值發生了變化。這裡學過C語言的童鞋就明白是怎麼回事了,壓棧的是引用的複製。
由於引用是指向某個變數的,所以對引用的操作其實就是對他指向的變數的操作。 (作用和傳指標一樣,只是不用解引用) &是指向某個變數位址的符號,函數sum中的形參&$a其實就是實參$a,那麼將其傳進sum中進行了一次運算之後,實參$a的值其實也發生了改變,就是這麼回事。
說明:
按值傳遞中原來參數的值在呼叫其他函數之後還是原來的值,而引用傳遞則是改變了原來的值。依照按值傳遞的做法來傳值時,如果需要原來的值發生改變,則需要在進行程式碼複製,若是值夠大或是一大串字串時,會使程式碼比較多,重複,而引用傳遞則不需要複製PHP程式碼,對提高效能這一個方面有很大的優勢。
更多PHP相關知識,請造訪php中文網!
以上是php值傳遞和引用傳遞的差別是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!