TLDR:
$date1 = new DateTime();
$date2 = (clone $date1)->modify('+3 years');
(Bản sao nông được ban hành - DateTime sao chép sâu khiến (hiện tại) không có ý nghĩa )
Đơn giản như vậy :)
Giải thích "php tạo đối tượng datetime từ datetime khác":
- Các
clone
từ khóa làm thường xuyên cạn copy - enaugh đối với trường hợp này (tại sao => xem dưới đây)
- Bao bọc nó bằng
()
đánh giá biểu thức trả về đối tượng mới được tạo bằngclone
->modify()
do đó được gọi và sửa đổi đối tượng mới
DateTime::modify(...)
tài liệu:
Trả về đối tượng DateTime cho chuỗi phương thức hoặc FALSE khi bị lỗi.
$date2
hiện chứa bản sao / bản sao mới được tạo & sửa đổi, trong khi $date1
vẫn không thay đổi
Tại sao bạn không cần phải sao chép sâu ở đây:
Deep copy / clone chỉ cần thiết khi bạn cần sao chép mục tiêu của các thuộc tính là tham chiếu , nhưng điều này:
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();
kết quả đầu ra:
array(3) {
["date"]=>
string(26) "2019-08-21 11:38:48.760390"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
nên không có tài liệu tham khảo, chỉ cần các loại đơn giản => không cần phải copy sâu .