Запретить новому объекту обновляться переменными старого объекта

#php #class #variables #object #clone

#php #класс #переменные #объект #клонировать

Вопрос:

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

 $obj2 = $obj1
  

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

Ответ №1:

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

 $obj2 = clone $obj1;
  

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

Комментарии:

1. Потрясающе, теперь я чувствую себя глупо, лол. Спасибо, это сработало проще / лучше, чем я когда-либо надеялся!

Ответ №2:

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

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

Комментарии:

1. @KingCrunch Спасибо за ссылку. Я буду уверен, что не буду использовать слово «указатель», когда говорю о ссылках в PHP.