동일한 포블을 가지고 있습니다 (about making a copy of an object without reference in PHP).하지만 해결 방법이 효과가 없습니다.PHP 객체 복제가 작동하지 않습니다.
컬렉션의 모든 요소를 가져 와서 하나의 속성 (월 추가)을 변경하고 새 요소를 새 컬렉션으로 푸시하고 싶습니다.
따라서 clone
을 사용하여 해당 인스턴스에만 영향을 주어야하는 Invoice
의 완전히 새로운 인스턴스를 얻지 만 그렇지 않습니다. 이 코드
는 :
$thisInvoice
송장 수집 목적
while($thisInvoiceYear <= CURRENT_YEAR) {
$clonedInvoice = clone($thisInvoice);
$this->extendedInvoices->push($clonedInvoice);
$toSaveInvoice = $this->extendedInvoices->last();
$thisInvoiceYear = $this->getCurrentYear($toSaveInvoice);
$toSaveInvoice->Schedule->StartDate = Carbon::parse($toSaveInvoice->Schedule->StartDate)->addMonths($period);
unset($clonedInvoice);
}
, $this->extendedInvoices
클래스 송장하는 방법이다.
$toSaveInvoice
에서 수행 된 모든 변경 사항은 원래 수집 요소에도 영향을 미칩니다. 3 번 반복 한 후, 날짜는 extendedInvoices의 모든 요소에 대해 동일이 아니어야합니다 : 나는 Laravel 5.2을 사용하고
,하지만 난 컬렉션의 요소를 복제하는 헬퍼가없는 생각합니다.
clone()
이 작동하지 않는 이유를 알고 계십니까? 도와 주셔서 정말로 고맙습니다.
클론은 "얕은 복제"를 수행 할 가능성이 높습니다. "딥 클론"(즉, Invoice 객체 내의 모든 중첩 된 객체 복제)을 수행하기 위해 맞춤 magic'__clone' 메소드를 제공해야 할 수도 있습니다. –
여기에 좋은 예가 있습니다 : http://php.net/manual/en/language .oop5.cloning.php – dMd