PHP-使用DateInterval添加和减去Days奇怪的错误

Web*_*ron 0 php datetime dateinterval

我正在尝试使用date_add和在日期中加上和减去#天date_sub,但是得到一些奇怪的结果。我认为这是一个简单的答案,我对PHP并不了解,所以不知道为什么。

这是我的代码:

$y = new DateTime('2016-05-17');
$z2 = 7;
$tempy = $y;
$tempy->sub(new DateInterval('P' . $z2 . 'D'));
$startdate = date_format($tempy, "Y-m-d");
$y->add(new DateInterval('P' . $z2 . 'D'));
$enddate = date_format($y, "Y-m-d");
echo "Start: " . $startdate . "  End: " . $enddate . "\r\n";
Run Code Online (Sandbox Code Playgroud)

结果如下:

Start: 2016-05-10 End: 2016-05-17

看起来,即使我使用一个临时变量$tempy作为开始日期,它仍然会对其进行修改,并且结束日期已关闭。

编辑:预期结果:

Start: 2016-05-10 End: 2016-05-24

Jes*_*Hun 5

当您这样做时:

$tempy = $y;
Run Code Online (Sandbox Code Playgroud)

您创建对第一个对象的伪引用,但实际上并没有复制它。为此,您需要使用clone关键字:

$tempy = clone $y;
Run Code Online (Sandbox Code Playgroud)

现在,一切都会按预期进行。如果不进行克隆,则在修改$tempy时也会修改$y

编辑:添加有关此手册的链接(来自@Devon的答案)http://php.net/manual/zh/language.oop5.references.php