2015-01-29 2 views
-1

왜 개체를 복제해야합니까? 차이점이 뭐야? 우리가 대상을 복제 할 때 장면 뒤에서 무슨 일이 일어나고있는 걸까요? 어쩌면 낮은 자원을 사용하여 다른 객체를 만들 수 있습니까?개체를 복제하면 어떤 차이가 있습니까?

+0

[이 문서의 첫 번째 단락은 모든 질문을 요약] (http://php.net/manual/en/language.oop5.cloning.php). 때로는 예를 들어 SwiftMailer에서 같은 이메일의 여러 복사본을 다른 사람들에게 보내려 할 때 개체를 복제합니다. 아니면 원래의'DateTime' 객체를 수정하지 않고'DateTime' 객체와'add'를 가져 가고 싶습니다. 많은 가능성. – sjagr

+0

음, 나는 잘못된 방향으로 가고 있었다 :) 고마워. –

답변

2

개체 사본이 필요할 때 개체를 복제합니다. 객체에 대한 참조 만 전달하면 그 객체는 여전히 동일합니다. 이 때문에 개체의 속성을 변경하고 동일한 개체를 사용하는 모든 곳에서 변경 내용을 볼 수 있습니다. 복제 할 때 참조를 작성하지 않고 정확한 사본을 작성하십시오. 사본의 속성을 변경해도 원본은 변경되지 않습니다.

이의이 예

$a = new MyClas(); 
$a->myProperty = 'Hello World'; 
$b = clone $a 
$b->myProperty = 'See You'; 

echo $a->myProperty . '/' . $b->myProperty; 
결과가 될 것입니다

"를 살펴 보자 없음"당신은 참조/당신을 참조하십시오 "

$a = new MyClas(); 
$a->myProperty = 'Hello World'; 
$b = $a 
$b->myProperty = 'See You'; 

echo $a->myProperty . '/' . $b->myProperty; 

이 인쇄됩니다

는 이제 다음 코드를 살펴 보자 Hello World/See You "

+0

좋은 예입니다. 감사. 왜 그들은 항상 나를 downvoting입니까? –

+1

PHP 문서에서 클로닝에 대한 부분이 있습니다. 묻기 전에 먼저 문서를 살펴 보는 것이 일반적입니다. RTFM 일 수도 있습니다. –

0

꽤 넓은 질문 ....

왜?

$dateInterval = DateInterval('P2D'); 
$date1 = new DateTime(); 
$date2 = clone $date1; 
$date1->sub($dateInterval); 
$date2->add($dateInterval); 

쉽게 날짜 범위의 두 끝을 얻기 위해 .... 그래, 내가 $date2을 인스턴스화 수도 만든다 :

상황, 나는 이틀 전에 때문에 이일 사이의 기간을 원하는 복제보다는 new DateTime();으로; 하지만 만약 $ date1에 복제를하기 전에 몇 가지 추가 수정을해야하고 $ date2는 그 변경을 기반으로 할 필요가 있다면 복제가 훨씬 쉽고 다시 할 필요가 없습니다. additional modifications

I $date2 = $date1은 단순히 동일한 객체에 대한 참조 일 뿐이므로 하나의 참조에 대해 수행 된 모든 조작은 참조이기 때문에 자동으로 수행됩니다. 복제는 고유 한 인스턴스 인 복제본을 만듭니다.

+0

니스, 지금은 복제의 좋은면을 보았습니다. 복제는 원본 개체의 고유 한 버전을 만듭니다. –

0

개체를 복제하면 복제가됩니다. 무대 뒤에서 특별한 일이 일어나지 않습니다.

모든 속성을 복사하는 것이 자동으로 효과적입니다. 원래 객체의 각 속성을 새 객체에 복사하기 위해 모든 코드를 작성할 필요는 없습니다. 그리고 클래스에 새 속성을 추가하면 속성을 직접 복사 한 모든 장소를 업데이트 할 필요가 없습니다.

관련 문제