私は同じポブレムabout making a copy of an object without reference in PHPを持っていますが、その解決策は機能していません。PHPオブジェクトの複製が機能しません
私はコレクションのすべての要素を取り上げ、1つのプロパティを変更し(月を追加する)、新しい要素を新しいコレクションにプッシュしたいと考えています。
私は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()
が機能していないのですか?あなたの助けに感謝します。
クローンは「シャロークローン」を実行する可能性があります。 「深いクローン」を行うためにカスタムマジック '__clone'メソッドを提供する必要があるかもしれません(つまり、Invoiceオブジェクト内のすべてのネストされたオブジェクトを複製する) –
良い例はここです:http://php.net/manual/en/language .oop5.cloning.php – dMd