与克隆实例化PHP中的新对象相比,`clone`有什么优势?

TMO*_*TTM 5 php object

在这段代码中

<?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;
}
?>
Run Code Online (Sandbox Code Playgroud)

使用clone而不仅仅是优势是什么new?除了我们新定义的属性之外,我们是否获得了object1in 属性的所有相同值?object2name

Jon*_*Jon 10

在这种特定情况下,没有区别.有是一个区别,如果对象有其他属性(他们如果要创建一个新的实例,而不是克隆得到复位).

还有其他clone可能适合的情况:

  • 如果对象的类没有可供您访问的构造函数
  • 如果对象的类确实有构造函数,但您不知道应该传递给它的值是什么; 通常,如果您不知道如何构造重复对象
  • 如果构造新对象具有不希望的副作用
  • 如果对象具有内部状态,并且您不知道如何从"新构造"状态移动到已经具有的实例状态