TLDR:
$date1 = new DateTime();
$date2 = (clone $date1)->modify('+3 years');
(Salinan dangkal sekarang - Penyalinan mendalam DateTime membuat (saat ini) tidak masuk akal )
Sederhana seperti itu :)
Penjelasan "php buat objek datetime dari datetime lain":
- Kata
clone
kunci membuat salinan biasa yang dangkal - enaugh untuk kasus ini (mengapa => lihat di bawah)
- Membungkusnya dengan
()
mengevaluasi ekspresi yang mengembalikan objek yang baru dibuat olehclone
->modify()
oleh karena itu dipanggil dan memodifikasi objek baru
DateTime::modify(...)
dokumen:
Mengembalikan objek DateTime untuk rangkaian metode atau FALSE jika gagal.
$date2
sekarang berisi clone / copy yang baru dibuat & dimodifikasi, sementara $date1
tetap tidak berubah
Mengapa Anda tidak perlu menyalin dalam di sini:
Salin / kloning mendalam hanya diperlukan, saat Anda perlu menyalin target properti yang menjadi referensi , tetapi ini:
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();
keluaran:
array(3) {
["date"]=>
string(26) "2019-08-21 11:38:48.760390"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
jadi tidak ada referensi, cukup tipe sederhana => tidak perlu deep copy.