在php中对于一个对象,普通赋值和引用赋值有什么区别

例如:
class Car (){
public $name = "aodi";
}
$car_a = new Car();
$car_b = $car_a;
$car_c = &$car_a;
这样$car_a,$car_b,$car_c都指向了刚刚实例化的对象啊,加不加&符号有什么区别吗?

把变量存储值当成文件存储内容来理解,普通赋值就是文件复制,引用赋值就是建立快捷方式,明白了吧。追问

但是对于对象普通赋值和引用赋值现在看来效果是一样的,没有你说的拷贝的过程啊

追答

效果不一样,普通赋值后,两个变量是独立的,各自内容修改后不影响另外一个
引用赋值后,两个变量只想的同一个内存空间,任何一个的值修改后,另外一个跟着变化

温馨提示:内容为网友见解,仅供参考
第1个回答  2016-08-09
对象传智实际传的是对象标识符。当使用值传递的时候,作传值用的p1的标识符会被传递给被传值对象p2。此时,若修改p1的标识符(重建该对象即可),p2的标识符是不会改变的(p1 p2只是标识符相同的两个独立的对象)。但若为引用传值,p2的标识符是会随着p1的标识符一起改变。
第2个回答  2019-05-07
<?php 
    //普通赋值(常用)
    $a = 1;//定义并且赋值a等于1
$b = $a;//把a里面的值1“复制”给b
$a = 3;//给a重新赋值等于3,程序结束,b没有发生变化依然等于1。

echo $a.$b;//输出31

//地址引用赋值
$a = 1;//定义并且赋值a等于1
$b = &$a;//b的值存a的地址,指向a,注意:是地址。
//相当于指针指向了a(但是有区别)。
//实际上是告诉电脑,b的值存在a那里,a参数的存储地址相对b共享
$a = 3;//给a重新赋值。
echo $a.$b;//输出33,a实际赋值结果,b地址指向的那个存储地址里面的存值

形象的举例说明:A盒子里有一份文件,名称:c

普通赋值:拿A盒子的文件去复印一份,然后放在B盒子里。此时,两个盒子里都各自有内容相同的一份文件。

后面不管你往A里仍什么进去,B还是只有最初的那份文件。

引用赋值:B盒子里面只是放着一张纸条,写着文件放在A盒子里,请去A盒子里拿。

后面,不管你给A盒子放什么,需要B盒子里的文件的人,都去A盒子里拿,拿到什么就要看,A里面放着什么了。

相似回答