在此代码中
<?php
$object1 = new User();
$object1->name = "Alice";
$object2 = clone $object1;
$object2->name = "Amy";
echo "object1 name = " . $object1->name . "<br>";
echo "object2 name = " . $object2->name;
class User
{
public $name;
}
?>
使用clone
而不仅仅是new
有什么好处?
除了我们新定义的object1
之外,我们是否为object2
中name
的属性获取了所有相同的值?
答案 0 :(得分:10)
在这种特定情况下,没有区别。如果对象具有其他属性,那么将 (如果创建新实例而不是克隆则会重置它们。)
还有其他情况clone
可能合适:
答案 1 :(得分:2)
clone
将复制所有属性值,而不是将它们重置为默认值。例如,如果您有一个查询构建器类,并且希望两个查询几乎相同但是有一个或两个小差异,则很有用。您构建查询到达出发点,克隆它,然后使用单向和另一种方式。
答案 2 :(得分:1)
在这种情况下,没有,因为这是一个极其糟糕的对象借口。
但是,假设您正在创建一个游戏,其中每个类代表游戏中的一种对象。一个这样的物体可能是一个反弹的球。在这种情况下,new Ball()
会在起始位置创建一个新球,它会在第一个之后反弹。但是,clone $ball1
会将当前球复制到其实际位置。