如何深度复制 DateTime 对象?

2022-08-30 06:53:29
$date1 = $date2 = new DateTime();
$date2->add(new DateInterval('P3Y'));

现在包含相同的日期 - 三年后。我想创建两个单独的日期时间,一个是从字符串解析而来的,另一个是从字符串中添加三年的。目前我已经像这样破解了它:$date1$date2

$date2 =  new DateTime($date1->format(DateTime::ISO8601));

但这似乎是一个可怕的黑客。有没有一种“正确”的方法来深度复制DateTime对象?


答案 1
$date1 = new DateTime();
$date2 = new DateTime();
$date2->add(new DateInterval('P3Y'));

更新:

如果要复制而不是引用现有的 DT 对象,请使用 ,而不是 。clone=

$a = clone $b;


答案 2

使用克隆运算符克隆日期:

$date1 = new DateTime();
$date2 = clone $date1;
$date2->add(new DateInterval('P3Y'));

默认情况下,克隆很浅,但对于 DateTime 来说足够深。在您自己的对象中,您可以定义魔术方法来克隆属性(即子对象),这些属性在父对象更改时需要克隆。__clone()

(我不确定为什么文档认为需要克隆对象的一个很好的例子是GTK。谁在 PHP 中使用 GTK?


推荐