У меня такой же poblem about making a copy of an object without reference in PHP, но это решение не работает.Клонирование объекта PHP не работает
Я хочу взять все элементы коллекции, изменить одно свойство (добавить несколько месяцев) и вставить новый элемент в новую коллекцию.
Таким образом, я использовал clone
, чтобы получить совершенно новый экземпляр Invoice
, который должен быть затронут именно этим экземпляром, но это не так.
С помощью этого кода:
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);
}
Где $thisInvoice
является объектом коллекции счетов-фактур, $this->extendedInvoices
является методом класса счета-фактуры.
Проблема в том, что каждое изменение, сделанное в $toSaveInvoice
, также влияет на исходный элемент коллекции. После 3-х итераций, дата является одинаковым для всех элементов extendedInvoices и не должно быть:
Я использую Laravel 5.2, но я думаю, что не помощники клонировать элемент коллекции.
Вы знаете почему clone()
не работает? Большое спасибо за вашу помощь.
Клон, вероятно, будет делать «мелкий клон»; вам может потребоваться создать собственный метод «__clone» для создания «глубокого клонирования» (т. е. клонирование всех вложенных объектов в вашем объекте Invoice) –
хороший пример здесь: http://php.net/manual/en/language .oop5.cloning.php – dMd