首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试克隆stdClass

尝试克隆stdClass
EN

Stack Overflow用户
提问于 2013-04-11 17:58:02
回答 3查看 6.6K关注 0票数 7

我正在尝试克隆一个具有DateTime属性的stdClass对象。但它失败了。看起来克隆不起作用了。我是否应该编写自己的__clone()方法?这里出了什么问题?

代码:

代码语言:javascript
复制
$object = new stdClass;
$object->date = new DateTime();
var_dump($object->date);

$cloned = clone($object);
$object->date->modify('+1 day');
var_dump($cloned->date);

输出:

代码语言:javascript
复制
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'
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-11 18:03:31

克隆对象时,只需将所有对象属性复制到该对象的新实例中。实际上是这样的:

代码语言:javascript
复制
$cloned = new stdClass;
$cloned->date = $object->date;

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

要深度克隆一个对象,您需要使用__clone method实现一个自定义类,并手动clone它的所有子对象。

票数 4
EN

Stack Overflow用户

发布于 2015-05-08 06:05:07

如何通过cast链接“克隆”一个php POSCO (普通的旧StdClass对象):

代码语言:javascript
复制
$cloneObj = (object) (array) $myPOSCO;
var_dump($cloneObj == $myPOSCO); // true
var_dump($cloneObj === $myPOSCO); // false
票数 11
EN

Stack Overflow用户

发布于 2019-02-28 03:16:23

还有另一个更简单的选择:

代码语言:javascript
复制
$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);

输出必须是:

代码语言:javascript
复制
    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'
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15945837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档