DateTime变量通过执行保持更改

时间:2016-10-05 10:07:29

标签: php datetime php-7

我正在经历一个奇怪的PHP操作。当我尝试使用DateTimeDateInterval时,如果我执行此代码:

<?php
$dateTime = new \DateTime('2016-09-04');
$stepStart = $dateTime;

$dateTime->add(new \DateInterval('P2D'));

var_dump($stepStart);
die;

$stepStart2016-09-06作为值,而不是我期待的2016-09-04

此外,如果我在添加2天之前添加$stepStart->format('Y-m-d'),则值为正确,我有2016-09-04

有人可以解释一下吗?

使用PHP 7.0.10在Ubuntu 14.04上工作(并在OSX上测试)。

1 个答案:

答案 0 :(得分:1)

$stepStart = $dateTime;这只是对$ dateTime的创建引用。如果要拥有此对象的副本,则必须使用CLONE

$stepStart = clone $dateTime;

http://php.net/manual/en/language.oop5.cloning.php

使用对象/类必须记住它们的行为与简单变量略有不同;)