왜 개체를 복제해야합니까? 차이점이 뭐야? 우리가 대상을 복제 할 때 장면 뒤에서 무슨 일이 일어나고있는 걸까요? 어쩌면 낮은 자원을 사용하여 다른 객체를 만들 수 있습니까?개체를 복제하면 어떤 차이가 있습니까?
답변
개체 사본이 필요할 때 개체를 복제합니다. 객체에 대한 참조 만 전달하면 그 객체는 여전히 동일합니다. 이 때문에 개체의 속성을 변경하고 동일한 개체를 사용하는 모든 곳에서 변경 내용을 볼 수 있습니다. 복제 할 때 참조를 작성하지 않고 정확한 사본을 작성하십시오. 사본의 속성을 변경해도 원본은 변경되지 않습니다.
이의이 예
$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 "좋은 예입니다. 감사. 왜 그들은 항상 나를 downvoting입니까? –
PHP 문서에서 클로닝에 대한 부분이 있습니다. 묻기 전에 먼저 문서를 살펴 보는 것이 일반적입니다. RTFM 일 수도 있습니다. –
꽤 넓은 질문 ....
왜?
$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
은 단순히 동일한 객체에 대한 참조 일 뿐이므로 하나의 참조에 대해 수행 된 모든 조작은 참조이기 때문에 자동으로 수행됩니다. 복제는 고유 한 인스턴스 인 복제본을 만듭니다.
니스, 지금은 복제의 좋은면을 보았습니다. 복제는 원본 개체의 고유 한 버전을 만듭니다. –
개체를 복제하면 복제가됩니다. 무대 뒤에서 특별한 일이 일어나지 않습니다.
모든 속성을 복사하는 것이 자동으로 효과적입니다. 원래 객체의 각 속성을 새 객체에 복사하기 위해 모든 코드를 작성할 필요는 없습니다. 그리고 클래스에 새 속성을 추가하면 속성을 직접 복사 한 모든 장소를 업데이트 할 필요가 없습니다.
- 1. Seq.iter와 비교 - 어떤 차이가 있습니까?
- 2. `overload` 키워드는 어떤 차이가 있습니까?
- 3. 반품 여부는 어떤 차이가 있습니까?
- 4. Context.getText 및 Context.getResources.getText를 사용하면 어떤 차이가 있습니까?
- 5. 프로토 타입 개체를 복제하면 처음부터 개체를 만드는 것보다 성능이 향상됩니까?
- 6. 는 대 FIND_IN_SET에 어떤 차이가 있습니까 또는
- 7. GUID 대 int : SEO에 어떤 차이가 있습니까?
- 8. 이 기능은 매크로 의미와 어떤 차이가 있습니까?
- 9. 해당 코드에 fflush가 없으면 어떤 차이가 있습니까?
- 10. self 키워드를 추가하면 어떤 차이가 있습니까?
- 11. 카레 기능의이 구문에는 어떤 차이가 있습니까?
- 12. MVVM loose coupling은 MVP와 어떤 차이가 있습니까?
- 13. Microsoft의 MEF는 Eclipse와 어떤 차이가 있습니까?
- 14. 루프에서 Integer를 사용하면 어떤 차이가 있습니까?
- 15. LAN이나 WAN에서 nmap로 스캔하면 어떤 차이가 있습니까?
- 16. 초기화와 작업 간에는 어떤 차이가 있습니까?
- 17. bootstrap.css와 bootstrap.min.css 사이에 어떤 차이가 있습니까?
- 18. "var"는 필드 선언에 어떤 차이가 있습니까?
- 19. 콜론이 입력 문에 어떤 차이가 있습니까?
- 20. declare variable in/out에 어떤 차이가 있습니까?
- 21. strtotime + day 또는 + 일에 어떤 차이가 있습니까?
- 22. Lisp : 'nil과 nil 사이에 어떤 차이가 있습니까?
- 23. smtp 대신 smtps를 사용하면 어떤 차이가 있습니까?
- 24. ping이나 socket으로 프록시를 확인하면 어떤 차이가 있습니까?
- 25. 엑셀 파일과 텍스트 파일을 읽는 것과 어떤 차이가 있습니까?
- 26. lock.lock() 전 사이에 어떤 차이가
- 27. 개체에 액세스하거나 참조 된 개체를 만드는 것과의 효율성 차이가 있습니까?
- 28. 왜 두 개체를 트위닝 할 때 내가하고있는 트위닝에 차이가 있습니까?
- 29. 실행 시간 차이가 있습니까?
- 30. 어떤 VBA 개체를 참조 할 수 있습니까?
[이 문서의 첫 번째 단락은 모든 질문을 요약] (http://php.net/manual/en/language.oop5.cloning.php). 때로는 예를 들어 SwiftMailer에서 같은 이메일의 여러 복사본을 다른 사람들에게 보내려 할 때 개체를 복제합니다. 아니면 원래의'DateTime' 객체를 수정하지 않고'DateTime' 객체와'add'를 가져 가고 싶습니다. 많은 가능성. – sjagr
음, 나는 잘못된 방향으로 가고 있었다 :) 고마워. –