2016-10-05 27 views
0

我遇到了一個奇怪的PHP操作。當我試圖在DateTimeDateInterval工作,如果我執行此代碼:DateTime變量通過執行保持更改

<?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(並在OSX上測試)的Ubuntu 14.04上工作。

回答

1

$stepStart = $dateTime;這只是創建對$ dateTime的引用。如果你想擁有此對象的副本,你必須使用克隆

$stepStart = clone $dateTime; 

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

與對象/類播放你必須記住,他們的行爲不是簡單的變量有點不同;)