Как вы явно создаете копию переменной в PHP? - PullRequest
19 голосов
/ 24 января 2011

У меня есть массив объектов 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 Ответ

49 голосов
/ 24 января 2011

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

$copy = clone $object;

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...