php中的对象传值方式
php中的对象传值方式
NO1:php中变量赋值与对象赋值对比:
<?php
$a = 1; //声明一个变量并赋值
$b = $a; //将数据类型的值赋给另一个变量
$a = 2; //修改$a的值
echo $b; //1 $a与$b是两个独立的内存空间,修改其中一个另一个不受影响
//定义一个类
class Person{
public $name;
public $age;
}
$p = new Person; //new一个Person对象
$p->name = 'yyq'; //通过对象给成员name赋值
$m = $p; //将对象赋值给另一个变量
$m->name = 'change-yyq'; //修改$m的name值
echo $p->name; //change-yyq 通过引用传值方式成功赋值
echo $m->name; //change-yyq
NO2:解析如下
a:以上分别进行了变量赋值与对象赋值的操作方式,变量赋值方式可看作为‘拷贝赋值’,故在修改$a的情况下,$b值不受影响。
b:而将数据类型赋值给对象$p,通过$p修改对象内部的值成功,这种方式是引用传值。而将$p赋值给$m是将对象拷贝一份,还是按引用传值呢?可以看到当修改了$m的name值后$p的name值也被修改,所以并没有拷贝一份数据,也不是引用传值,它只是拷贝了一份对象标识符,依旧共用一份数据。
c:那对象按照引用传值的话是怎样的操作呢,代码如下:
$m = &$p; //引用传值,也不是直接拷贝一份数据,而是直接将$m指向对象标识符,修改其中一个值,所有值均被修改