TLDR :
$date1 = new DateTime();
$date2 = (clone $date1)->modify('+3 years');
(Shallow copy is enaugh- Deep copy-ing DateTime is (current ) no sense )
그렇게 간단합니다 :)
설명 "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"
}
따라서 참조가 없으며 단순한 유형 만 => 딥 복사 할 필요가 없습니다 .