У меня есть класс, который имеет массив объектов.У меня есть функция, которая зацикливается на массиве и форматирует значение, а затем просто помещает эти отформатированные значения в отдельный массив ... и затем возвращает их.
Вот соответствующий код:
<code>class MoneyThing {
public $taxes = array();
public function formatTaxes(){
// Pretend the $taxes array is populated as such when called, with a single LeviedTax object
// Array
// (
// [0] => LeviedTax Object
// (
// [name] => HST
// [rate] => 13
// [total] => 17.55
// [harmonized] => 1
// )
// )
echo "<pre>".print_r($this->taxes, true)."
"; $ formattedTaxes = $ this-> tax; foreach ($ formattedTaxes as $ tax) {// Сделать клон объекта. Объект PHP по умолчанию скопирован в другие переменные по ссылке. // $ tax = clone $ tax; // Просто добавляем знак доллара $ tax-> total = money_format ($ tax-> total); $ formattedTaxes [] = $ tax;} echo "
".print_r($this->taxes, true)."
"; // Напечатаем 'total' долларомзнак. Почему ???: // Array // (// [0] => LeviedTax Object // (// [name] => HST // [rate] => 13 // [total] => $ 17.55 // [harmonized] => 1 //) //) return $ formattedTaxes;}}
Я напечатал массив класса до и после цикла foreach. Я вижу, что массив сохраняет эти изменения,как если бы я сделал их напрямую по ссылке в foreach. Я ожидаю иметь один и тот же массив до и после цикла, поскольку я даже не работаю с указанным array.
Насколько я понимаю, массивы копируются просто и понятно, тогда как объекты копируются по ссылке.Однако, так как я копирую массив объектов, я ожидаю, что не придется использовать клон, потому что это не по ссылке ... верно?
Почему мне нужно раскомментировать $tax = clone $tax;
, чтобы на самом деле не сохранятьсяотформатированные значения?