TLDR:
$date1 = new DateTime();
$date2 = (clone $date1)->modify('+3 years');
(Sığ kopya enaugh - Derin kopya-ing DateTime yapar (şu anda) hiçbir anlamda )
Bu kadar basit :)
"Php başka bir tarih saatinden datetime nesnesini oluştur" açıklaması:
cloneAnahtar kelime düzenli hale sığ kopya - enaugh bu durum için (=> aşağıya bakınız neden)
- Bunu sarmak
(), yeni oluşturulan nesneyi şu şekilde döndüren ifadeyi değerlendirir:clone
->modify() bu nedenle çağrılır ve yeni nesneyi değiştirir
DateTime::modify(...) docs:
Başarısızlık durumunda FALSE veya yöntem zincirleme için DateTime nesnesini döndürür.
$date2artık $date1değişmeden kalırken yeni oluşturulan ve değiştirilmiş klon / kopyayı içerir
Neden burada derinlemesine kopyalamaya gerek yok:
Derin kopya / klon yalnızca referans olan özelliklerin hedeflerini kopyalamanız gerektiğinde gereklidir , ancak bu:
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();
çıktılar:
array(3) {
["date"]=>
string(26) "2019-08-21 11:38:48.760390"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
yani referans yok, sadece basit tipler => derin kopyaya gerek yok .