php中变量赋值默认是赋值传递,但是对象类型比较特殊,默认是引用传递
这涉及到php的深复制和浅复制,有兴趣的可以看看
1. 原始类型 – 直接赋值
$name1 = 'sky';
$name2 = $name1;
$name2 = 'fly';
echo $name1.' '.$name2; //sky fly
2. 数组array – 直接赋值
$arr1 = array(0, 1, 2, 3);
$arr2 = $arr1;
$arr2[0] = 6;
echo $arr1[0].' '.$arr2[0]; //0 6
3. class类 – 内存地址
class Person{
public $name = 'sky';
public $age = 14;
}
$person1 = new Person();
$person2 = $person1;
$person2->name = 'moon';
echo $person1->name.' '.$person2->name; //moon moon
可以看出,对象赋值默认采用的是引用赋值
4. php中规定,使用『&』符号,可以将普通赋值改成内存地址,看下面代码
$name1 = 'sky';
$name2 = &$name1; //&符号的使用
$name2 = 'fly';
echo $name1.' '.$name2; //fly fly