php中对象是引用类型吗?

2017-06-12  本文已影响0人  dagailv

这貌似是一个极其简单的问题,还用得着专门写一篇博文?各位看官,最初我也这么认为,但这的确蒙蔽了你那水灵灵的小眼睛,不妨看看什么是引用?

$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。

上一篇下一篇

猜你喜欢

热点阅读