這貌似是一個極其簡單的問題,還用得著專門寫一篇博文?各位看官,最初我也這么認(rèn)為,但這的確蒙蔽了你那水靈靈的小眼睛,不妨看看什么是引用?
$a =?10;
$b = &$a;
$b = 20;
var_dump($a,$b);
在這段極其簡單的代碼中,$b是$a的引用,也即是別名,修改$b,$a會變,反之亦然。這就是所謂的引用,那對象是不是也是這樣的呢?
class A
{
public $num = 10;
}
$a = new A();
$a->num = 20;
function demo($b)
{
$b[0] = 5;
var_dump($b);
}
demo($a)
var_dump($a);
你會發(fā)現(xiàn)兩次輸出一樣,那這是不是說明對象做函數(shù)參數(shù)時是引用傳參呢?在這一點(diǎn)上不得不說千鋒的學(xué)生的確是勤學(xué)好問,我剛開始以為是引用傳參,但同學(xué)提出如果你把demo里修改為:
function demo($b)
{
$b = new A();
var_dump($b);
}
兩次輸出并不一樣!這是為什么呢?如果從c語言角度講,php里的任何變量,包括對象都是指針,對象做參數(shù)相當(dāng)于二重指針,所以當(dāng)$b指向一個全新的對象后,并不影響$obj,所以對象做函數(shù)參數(shù)并不是引用傳參!又這么一幫勤學(xué)好問的學(xué)生,整個水準(zhǔn)都不一樣了。