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
然后,php中规定,使用“&”符号,可以将普通赋值改成内存地址,看下面代码
$name1 = 'sky';
$name2 = &$name1; //&符号的使用
$name2 = 'fly';
echo $name1.' '.$name2; //fly fly
可以看出,对象赋值默认采用的是引用赋值!
在php5 的对象编程经常提到的一个关键点是“默认情况下对象是通过引用传递的”。但其实这不是完全正确的。下面通过一些例子来说明。
PHP 的引用是别名,就是两个不同的变量名字指向相同的内容。在 PHP 5,一个对象变量已经不再保存整个对象的值。只是保存一个标识符来访问真正的对象内容。 当对象作为参数传递,作为结果返回,或者赋值给另外一个变量,另外一个变量跟原来的不是引用的关系,只是他们都保存着同一个标识符的拷贝,这个标识符指向同一个对象的真正内容。