案例一
<?php class Person{ public $name; } $p1 = new Person; $p1->name = 'dick'; $p2 = $p1; $p2->name = 'leo'; echo 'p1name->'.$p1->name; echo '<br>'; echo 'p2name->'.$p2->name;
输出结果为:
p1name->leo
p2name->leo
原因:
当我们把对象赋值给一个变量时也是值拷贝,但是拷贝的是对象的标识符,所以两个变量指向同一个地方,$p2改变时$p1也改变。

案例二
<?php class Person{ public $name; } $p1 = new Person; $p1->name = 'dick'; $p2 = $p1; $p2 = '字符串'; echo 'p1name->'.$p1->name;
输出结果为:
p1name->dick
原因:
$p1变量指向发生改变不影响$p1

案例三
<?php class Person{ public $name; } $p1 = new Person; $p1->name = 'dick'; $p2 = &$p1; $p2->name = 'leo'; unset($p2); echo 'p1name->'.$p1->name; // echo '<br>'; // echo 'p2name->'.$p2->name;
输出结果为:
p1name->leo
原因:
虽然$p2通过引用传递与$p1指向同一个地方,但主要unset()销毁的是$p2变量而不是他所指向的地方,所以$p1仍可以正常使用。

浙公网安备 33010602011771号