2016-10-05 8 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-04の私は期待していた、値として2016-09-06を持つことになります。

さらに、2日追加する前に$stepStart->format('Y-m-d')を追加した場合、値は正しく、私には2016-09-04があります。

誰かがそれを説明できますか?

PHP 7.0.10でUbuntu 14.04で作業し(OSXでテスト済み)

答えて

1

$stepStart = $dateTime;これはちょうど$ dateTimeへの参照を作成しています。

);あなたは、このオブジェクトのコピーを持っているしたい場合は、CLONE

$stepStart = clone $dateTime; 

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

あなたは、彼らが単純な変数よりも少し異なる振る舞いをすることを覚えておく必要があるオブジェクト/クラスと遊ぶ使用する必要があります。

関連する問題