为什么在此代码中我的 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
就是因为这行
$dt2 = $dt1;
变量被复制,对象被引用。
请参阅此处以获取带有示例的答案 - https://stackoverflow.com/a/6257203/1234502
您应该能够使用克隆来解决此问题
考虑 PHP 的对象和引用页面中的以下文本:
从 PHP 5 开始,对象变量不再包含对象本身作为值。它只包含一个对象标识符,允许对象访问器查找实际对象。
基本上,您的$dt2 = $dt1;
只是复制对象引用而不是其内容;有关执行此任务的适当方法,请参阅@lolka_bolka的响应。