這貌似是一個極其簡單的問題,還用得着專門寫一篇博文?各位看官,最初我也這麼認爲,但這的確矇蔽了你那水靈靈的小眼睛,不妨看看什麼是引用?php
$a = 10;函數
$b = &$a;指針
$b = 20;對象
var_dump($a,$b);io
在這段極其簡單的代碼中,$b是$a的引用,也便是別名,修改$b,$a會變,反之亦然。這就是所謂的引用,那對象是否是也是這樣的呢?function
class Aclass
{變量
public $num = 10;引用
}demo
$a = new A();
$a->num = 20;
function demo($b)
{
$b[0] = 5;
var_dump($b);
}
demo($a)
var_dump($a);
你會發現兩次輸出同樣,那這是否是說明對象作函數參數時是引用傳參呢?在這一點上不得不說千鋒的學生的確是勤學好問,我剛開始覺得是引用傳參,但同窗提出若是你把demo裏修改成:
function demo($b)
{
$b = new A();
var_dump($b);
}
兩次輸出並不同!這是爲何呢?若是從c語言角度講,php裏的任何變量,包括對象都是指針,對象作參數至關於二重指針,因此當$b指向一個全新的對象後,並不影響$obj,因此對象作函數參數並非引用傳參!又這麼一幫勤學好問的學生,整個水準都不同了。
千鋒php-php培訓的實力派