Как вы явно создаете копию переменной в PHP?

У меня есть массив объектов stdClass. Когда я назначаю его переменной, она не копирует переменную, а ссылается на исходную переменную. Мой код выглядит следующим образом:

for ( $i = 0, $len = count($rows); $i < $len; $i++ )
{
    $row = $rows[$i];
    echo $rows[$i]->games;
    $row->games = 'test';
    echo $rows[$i]->games;
}

Первое эхо выводит нормальное значение, а второе эхо выдает "тест". Даже если я устанавливаю свойство на $row (который должен быть скопирован), он фактически устанавливает его в исходном элементе массива.

Почему это и как я могу создать копию, так что изменение копии не изменяет оригинал?

Ответы

Ответ 1

Используйте ключевое слово clone.

$copy = clone $object;

Важно отметить:

Когда объект клонируется, PHP 5 выполняет мелкую копию всех свойств объекта. Любые свойства, которые являются ссылками на другие переменные, останутся ссылками.

он поставляется с хорошим магическим методом:

Как только клонирование будет завершено, если будет определен метод __clone(), тогда будет вызван метод созданного объекта __clone(), чтобы разрешить любые необходимые свойства, которые необходимо изменить.