PHP - 为什么在我的代码中通过引用复制日期时间对象


PHP - Why is DateTime object copied by reference in my code?

为什么在此代码中我的 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的响应。