TLDR:
$date1 = new DateTime();
$date2 = (clone $date1)->modify('+3 years');
(การคัดลอกแบบตื้นคือวันที่และเวลาที่คัดลอกลึกทำให้ (ในปัจจุบัน) ไม่มีความหมาย )
ง่ายๆแค่นั้น :)
คำอธิบาย "php create datetime object from another datetime":
clone
คำหลักที่ทำให้ปกติตื้นสำเนา - enaugh สำหรับกรณีนี้ (ทำไม => ดูด้านล่าง)
- ห่อด้วยการ
()
ประเมินนิพจน์ที่ส่งคืนวัตถุที่สร้างขึ้นใหม่โดยclone
->modify()
จึงถูกเรียกใช้และปรับเปลี่ยนออบเจ็กต์ใหม่
DateTime::modify(...)
เอกสาร:
ส่งคืนอ็อบเจ็กต์ 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"
}
ดังนั้นจึงไม่มีการอ้างอิงเพียงแค่ประเภทธรรมดา => ไม่จำเป็นต้องคัดลอกลึก