对象之间的赋值和普通变量的赋值是有区别的,先看例子。
<?php
class Student
{
public $name;
}
$s1 = new Student();
$s1->name = '张三';
//对象之间赋值
$s2 = $s1;
$s2->name = '李四';
echo $s1->name;
echo '<br>';
echo $s2->name;
输出结果如下
如果是两个普通的变量之间赋值,结果又如何呢?
<?php
$name1 = "张三";
//变量之间赋值
$name2 = $name1;
$name2 = "李四";
echo $name1;
echo '<br>';
echo $name2;
运行结果如下:
对象之间的赋值,实际就是引用赋值,两个对象之间赋值后,就是一个对象了。所以当一个对象的内容发生变化后,另一个对象的内容也会发生变化。
普通变量之间的赋值,如果也想使用引用赋值,必须使用&,如:
$name2 = &$name1
那么,$name1和$name2也变成了同一个变量,它们之间相互影响。
新的问题来了,如何复制一个对象,不要让复制后的对象爱原来对象的 影响呢?使用clone 可以实现。
<?php
class Student
{
public $name;
}
$s1 = new Student();
$s1->name = '张三';
//克隆对象
$s2 = clone $s1;
$s2->name = '李四';
echo $s1->name;
echo '<br>';
echo $s2->name;
输出结果:
克隆后的对象,不会爱原对象的影响。上面的例子属于浅克隆,还有深克隆,在这里就不细讲了。