试图克隆一个stdClass

Spi*_*pir 6 php clone stdclass

我正在尝试克隆一个具有attribut的stdClass对象,这是一个DateTime.但它失败了.看起来克隆不起作用.我应该编写自己的__clone()方法吗?这有什么不对?

代码:

$object = new stdClass;
$object->date = new DateTime();
var_dump($object->date);

$cloned = clone($object);
$object->date->modify('+1 day');
var_dump($cloned->date);
Run Code Online (Sandbox Code Playgroud)

输出:

object DateTime (
    ->date = string (19) '2013-04-11 11:54:00'
    ->timezone_type = int 3
    ->timezone = string (13) 'Europe/Berlin'

object DateTime (
    ->date = string (19) '2013-04-12 11:54:00'
    ->timezone_type = int 3
    ->timezone = string (13) 'Europe/Berlin'
Run Code Online (Sandbox Code Playgroud)

CNS*_*ght 8

如何通过强制链接"克隆"一个php POSCO(Plain Old StdClass对象):

$cloneObj = (object) (array) $myPOSCO;
var_dump($cloneObj == $myPOSCO); // true
var_dump($cloneObj === $myPOSCO); // false
Run Code Online (Sandbox Code Playgroud)


dec*_*eze 4

克隆对象时,所有对象属性都会简单地复制到该对象的新实例。实际上是这样的:

$cloned = new stdClass;
$cloned->date = $object->date;
Run Code Online (Sandbox Code Playgroud)

您可能知道,将一个对象分配给另一个变量不会复制该对象;而是将其分配给另一个变量。仍然只有一个对象,现在有两个对其的引用。

深度克隆对象,您需要使用该__clone方法并手动实现clone其任何子对象来实现自定义类。

  • 有一个肮脏的黑客可以深度克隆 stdClass: $cloned = unserialize(serialize($object)); (11认同)