我正在尝试克隆一个具有DateTime属性的stdClass对象。但它失败了。看起来克隆不起作用了。我是否应该编写自己的__clone()方法?这里出了什么问题?
代码:
$object = new stdClass;
$object->date = new DateTime();
var_dump($object->date);
$cloned = clone($object);
$object->date->modify('+1 day');
var_dump($cloned->date);输出:
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'发布于 2013-04-11 18:03:31
克隆对象时,只需将所有对象属性复制到该对象的新实例中。实际上是这样的:
$cloned = new stdClass;
$cloned->date = $object->date;您可能知道,将一个对象赋给另一个变量并不会复制该对象;仍然只有一个对象,现在有两个对它的引用。
要深度克隆一个对象,您需要使用__clone method实现一个自定义类,并手动clone它的所有子对象。
发布于 2015-05-08 06:05:07
如何通过cast链接“克隆”一个php POSCO (普通的旧StdClass对象):
$cloneObj = (object) (array) $myPOSCO;
var_dump($cloneObj == $myPOSCO); // true
var_dump($cloneObj === $myPOSCO); // false发布于 2019-02-28 03:16:23
还有另一个更简单的选择:
$object = new stdClass;
$object->date = new DateTime();
var_dump($object->date);
$cloned = clone $object;
$object->date->modify('+1 day');
var_dump($cloned->date);
var_dump($object->date);输出必须是:
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-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'https://stackoverflow.com/questions/15945837
复制相似问题