我正在经历一个奇怪的PHP操作。当我尝试使用DateTime
和DateInterval
时,如果我执行此代码:
<?php
$dateTime = new \DateTime('2016-09-04');
$stepStart = $dateTime;
$dateTime->add(new \DateInterval('P2D'));
var_dump($stepStart);
die;
$stepStart
将2016-09-06
作为值,而不是我期待的2016-09-04
。
此外,如果我在添加2天之前添加$stepStart->format('Y-m-d')
,则值为正确,我有2016-09-04
。
有人可以解释一下吗?
使用PHP 7.0.10在Ubuntu 14.04上工作(并在OSX上测试)。
答案 0 :(得分:1)
$stepStart = $dateTime;
这只是对$ dateTime的创建引用。如果要拥有此对象的副本,则必须使用CLONE
$stepStart = clone $dateTime;
http://php.net/manual/en/language.oop5.cloning.php
使用对象/类必须记住它们的行为与简单变量略有不同;)