先敲兩段代碼然后就可以看出兩者的區(qū)別,咱們透過現(xiàn)象看本質(zhì)
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
兩段代碼的差別在于函數(shù)sum的參數(shù)上,一個是傳值$a,另一個是傳引用&$a,其結(jié)果是傳值過后$a的值最終沒有發(fā)生改變,反之傳引用過后$a的值發(fā)生了變化。這里學(xué)過C語言的童鞋就明白是怎么回事了,壓棧的是引用的副本。由于引用是指向某個變量的,對引用的操作其實就是對他指向的變量的操作。(作用和傳指針一樣,只是不用解引用) &是指向某個變量地址的符號,函數(shù)sum中的形參&$a實際上就是實參$a,那么將其傳進sum中進行了一次++運算之后,實參$a的值實際上也就發(fā)生了改變,就是這么回事。