php中對象是引用類型嗎?

這貌似是一個極其簡單的問題,還用得着專門寫一篇博文?各位看官,最初我也這麼認爲,但這的確矇蔽了你那水靈靈的小眼睛,不妨看看什麼是引用?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培訓的實力派

相關文章
相關標籤/搜索