2014-12-15 3 views
5

이 코드에서 내 DateTime 개체가 참조로 복사 된 것 같습니다.PHP - DateTime 객체가 내 코드에서 참조로 복사되는 이유는 무엇입니까?

<?php 

date_default_timezone_set('UTC'); 

$dt1 = new \DateTime('2015-03-15'); 
$dt2 = $dt1; 
$dt2 = $dt2->modify('-1 year'); 

echo $dt1->format('c') . PHP_EOL; 
echo $dt2->format('c'); 

?> 

내가 기대했다 :
여기 내 코드의

2015-03-15T00:00:00+00:00 
2014-03-15T00:00:00+00:00 

하지만이있어 :

2014-03-15T00:00:00+00:00 
2014-03-15T00:00:00+00:00 
+3

클론'$ dt2 = clone $ dt1;' – vaso123

+0

'DateTimeImmutable' 클래스를 사용하면 작동 할 것이고 결코 수정되지 않고 새로운 객체를 반환한다는 점만 제외하면'DateTime' 클래스와 완전히 동일하게 동작합니다 대신. – Daan

답변

5

이 때문에이 라인의의를

$dt2 = $dt1; 

수 변수 객체가 복사되고 객체가 참조됩니다.

예제와 함께 답변이 참조 - https://stackoverflow.com/a/6257203/1234502

당신은 PHP의 Objects and references page에서 다음 텍스트 고려 clone

+0

'변수가 복사되고 개체가 참조됩니다. ', 실제로는 정확하지 않습니다. –

+0

정말요? 나는 이것이 PHP에서 일어나는 것이라고 생각했다. – Pankucins

+3

예,하지만 "변수"와 "객체"는 다른 것이 아닙니다. 당신은 가치/원시 타입과 객체 (당신이 언급 한 응답으로 쓰여진대로)를 말해야합니다. –

0

으로이 문제를 해결 할 수 있어야한다 : PHP 5로

을을 오브젝트 변수는 오브젝트 자체를 더 이상 값으로 가지지 않습니다. 객체 접근자가 객체를 찾을 수있게하는 객체 식별자 만 포함합니다.

기본적으로 $dt2 = $dt1;은 단순히 객체 참조 만 복사하고 내용은 복사하지 않습니다. 이 작업을 수행하는 적절한 방법에 대한 @lolka_bolka의 응답을 참조하십시오.

관련 문제