PHP - 为什么在我的代码中通过引用复制DateTime对象?

时间:2014-12-15 15:14:23

标签: php datetime

为什么在这段代码中,我的DateTime对象是通过引用复制的呢? 这是我的代码:

<?php

date_default_timezone_set('UTC');

$dt1 = new \DateTime('2015-03-15');
$dt2 = $dt1;
$dt2 = $dt2->modify('-1 year');

echo $dt1->format('c') . PHP_EOL;
echo $dt2->format('c');

?>

我在期待:

2015-03-15T00:00:00+00:00
2014-03-15T00:00:00+00:00

但我得到了这个:

2014-03-15T00:00:00+00:00
2014-03-15T00:00:00+00:00

2 个答案:

答案 0 :(得分:6)

这是因为这一行

$dt2 = $dt1;

复制变量,引用对象。

通过示例 - https://stackoverflow.com/a/6257203/1234502

查看此答案

您应该可以使用clone

解决此问题

答案 1 :(得分:0)

考虑PHP Objects and references page中的以下文字:

  

从PHP 5开始,对象变量不再包含对象本身作为值。它只包含一个对象标识符,允许对象访问者查找实际对象。

基本上,你的$dt2 = $dt1;只是复制对象引用而不是它的内容;请参阅@lolka_bolka对执行此任务的适当方法的响应。