php中对象是引用类型吗?

Posted 成少雷

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,所以对象做函数参数并不是引用传参!又这么一帮勤学好问的学生,整个水准都不一样了。

以上是关于php中对象是引用类型吗?的主要内容,如果未能解决你的问题,请参考以下文章

JAVA的基本数据类型和引用数据类型的区别

JS基本数据类型和引用数据类型

java中方法的返回类型都有哪些?可以引用数据类型吗?举例说明

PHP类知识----值传递和引用传递

JAVA的基本数据类型和引用数据类型的区别

js基本类型和引用类型的区别