php中物件是引用型別嗎?

TigerJin發表於2021-09-09

這貌似是一個極其簡單的問題,還用得著專門寫一篇博文?各位看官,最初我也這麼認為,但這的確矇蔽了你那水靈靈的小眼睛,不妨看看什麼是引用?

$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);

你會發現兩次輸出一樣,那這是不是說明物件做函式引數時是引用傳參呢?在這一點上不得不說千鋒的學生的確是勤學好問,我剛開始以為是引用傳參,但同學提出如果你把demo裡修改為:

function demo($b)

{

$b = new A();

var_dump($b);

}

兩次輸出並不一樣!這是為什麼呢?如果從C語言角度講,PHP裡的任何變數,包括物件都是指標,物件做引數相當於二重指標,所以當$b指向一個全新的物件後,並不影響$obj,所以物件做函式引數並不是引用傳參!又這麼一幫勤學好問的學生,整個水準都不一樣了。


網際網路+時代,時刻要保持學習,攜手千鋒PHP,Dream It Possible。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2144/viewspace-2803395/,如需轉載,請註明出處,否則將追究法律責任。

相關文章