为什么在这段代码中,我的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
答案 0 :(得分:6)
这是因为这一行
$dt2 = $dt1;
复制变量,引用对象。
通过示例 - https://stackoverflow.com/a/6257203/1234502
查看此答案您应该可以使用clone
解决此问题答案 1 :(得分:0)
考虑PHP Objects and references page中的以下文字:
从PHP 5开始,对象变量不再包含对象本身作为值。它只包含一个对象标识符,允许对象访问者查找实际对象。
基本上,你的$dt2 = $dt1;
只是复制对象引用而不是它的内容;请参阅@lolka_bolka对执行此任务的适当方法的响应。