많은 참조를 포함하는 복잡한 PHP 객체의 복제본을 만드는 가장 좋은 방법은 무엇입니까? 그러면 새 객체의 참조가 원래 객체의 참조가 아닌 자체 메서드 및 속성을 가리 키도록 할 수 있습니까?PHP - 자신에 대한 참조가 들어있는 객체를 복제 하시겠습니까?
을 이해하면 $new_object = clone $old_object;
은 참조를 그대로 유지하는 얕은 사본을 생성합니다. 아마도 $ new_object의 참조는 이전 객체의 메소드를 가리킬 것입니다.
해당 매뉴얼 페이지에 대한 의견은 $new_object = unserialize(serialize($old_object));
이 깊은 복사본을 만드는 방법임을 시사합니다. 유망한 것처럼 들리지만이 접근법이 내 경우에 대해 정확히 무엇인지 의미하지는 않습니다. 참조가 복제본을 가리 키도록 변환되었는지 또는 절대적으로 또는 다른 것으로 만들어 졌는지, 그리고 내가 원하는 것을 수행하면 참조하는 것이 최선의 방법인지 여부는 확실하지 않습니다.
저는이를 위해 확립 된 표준 방법이 있는지 알고 싶습니다.
(참고 : 문제의 객체는 Drupal Views 객체이지만이 객체에 대한 중요한 특징은 거대하고 재귀가되는 많은 참조를 포함한다는 것입니다. . 당신이 전체 트리를 탐색하려고하면)
쿨, 고마워, +1. 이것이 일반화되고 표준화 된 접근법인지 아닌지에 대한 아이디어 (예 : 객체가 거대 할 때 성능상의 단점이 있다면? 내 테스트에서 괜찮은 것 같지만 테스트는 매우 기본입니다. – user568458
개체가 커지면 속도가 느려지지만 그럴 수도 있습니다. 나는 당신의 객체가 얼마나 큰지에 달려 있다고 생각합니다. 직렬화 된 버전은 메모리의 절반 이상을 차지합니다 (string()은 얼마나 큰지를 알려줄 것입니다). 그렇지 않다면 실행 시간은 사소한 것이어야합니다. – Cal
굉장합니다. 그래서 메모리는 간단하게 == strlen (serialize ($ object))를 사용합니다 - 그건 내 질문에 답하고 대답합니다. 감사! – user568458