TLDR:
$date1 = new DateTime();
$date2 = (clone $date1)->modify('+3 years');
(浅いコピーは十分です- 深いコピーを行うDateTimeは(現在のところ)意味がありません)
そのような単純な :)
説明「phpは別の日時から日時オブジェクトを作成します」:
clone
キーワードは、定期的に行い、浅いと、この場合のenaugh(理由=>は、以下を参照してください) -コピー
- でラップすると
()
、新しく作成されたオブジェクトを返す式が評価されます。clone
->modify()
したがって、呼び出され、新しいオブジェクトを変更します
DateTime::modify(...)
docs:
メソッドチェーンのDateTimeオブジェクトを返します。失敗した場合はFALSEを返します。
$date2
新しく作成および変更されたクローン/コピーが含まれますが、変更され$date1
ません。
ここにディープコピーする必要がない理由:
ディープコピー/クローンが必要なのは、参照であるプロパティのターゲットをコピーする必要がある場合のみですが、これは次のとおりです。
class TestDateTime extends DateTime{
public function test(){
//*this* way also outputs private variables if any...
var_dump( get_object_vars($this) );
}
}
$test = (new TestDateTime())->test();
出力:
array(3) {
["date"]=>
string(26) "2019-08-21 11:38:48.760390"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
したがって、参照はなく、単純な型=> ディープコピーの必要はありません。