Остановить обновление нового объекта со старыми переменными объекта - PullRequest
4 голосов
/ 11 апреля 2011

Я пытаюсь сделать что-то вроде:

$obj2 = $obj1

, где $ var1 - это объект, проблема в том, что я хочу, чтобы $ obj2 походил на снимок $ obj1 - именно так, как оно естьв этот момент, но по мере изменения переменных $ obj1, изменяется и $ obj2.Это вообще возможно?Или мне придется создать новый "фиктивный" класс, чтобы я мог создать клона?

Ответы [ 2 ]

7 голосов
/ 11 апреля 2011

Просто клонируйте объект, например, так:

$obj2 = clone $obj1;

Любые изменения членов $obj1 после приведенного выше утверждения не будут отражены в $obj2.

1 голос
/ 11 апреля 2011

Объекты передаются по ссылке в PHP.Это означает, что когда вы назначаете объект новой переменной, эта новая переменная содержит ссылку на тот же объект, а НЕ на новую копию объекта.Это правило применяется при назначении переменных, передаче переменных в методы и передаче переменных в функции.

В вашем случае и $obj1, и $obj2 ссылаются на один и тот же объект, поэтому изменение любого из них приведет к изменению одного и того же объекта..

...