php中对象是引用类型吗?
这貌似是一个极其简单的问题,还用得着专门写一篇博文?各位看官,最初我也这么认为,但这的确蒙蔽了你那水灵灵的小眼睛,不妨看看什么是引用?
$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,所以对象做函数参数并不是引用传参!又这么一帮勤学好问的学生,整个水准都不一样了。