Какой самый быстрый способ сравнить два объекта в PHP?
======================================================

Допустим, у меня есть объект - в данном случае объект User - и я хотел бы иметь возможность отслеживать изменения с помощью отдельного класса. Объект User не должен каким-либо образом изменять свое поведение, чтобы это произошло.

Поэтому мой отдельный класс создает его «чистую» копию, сохраняет его где-то локально, а затем позже может сравнить объект User с исходной версией, чтобы увидеть, изменилось ли что-нибудь в течение срока его службы.

Есть ли функция, шаблон или что-нибудь, что может быстро сравнить две версии объекта User?

**Опция 1** Может быть, я мог бы сериализовать каждую версию и напрямую сравнить или хешировать и сравнивать?

**Вариант 2** Может быть, я должен просто создать ReflectionClass, пройти через каждое из свойств класса и посмотреть, имеют ли две версии одинаковые значения свойств?

**Вариант 3** Может быть, есть простая нативная функция вроде`objects_are_equal($object1,$object2);`?

Какой самый быстрый способ сделать это?

 защищенным и приватным) свойствам объекта без его изменения - через[отражение](https://php.net/manual/en/book.reflection.php), Вы могли бы, если бы захотели,[клон](http://ca2.php.net/clone) перед изменением объекта, а затем сравните их, используя функции отражения, чтобы просмотреть различные свойства одного из двух объектов и сравнить значения. Это эффективно скажет вам, какие свойства изменились.

Если вам нужно посмотреть, изменились ли объекты, используйте операторы == или ===. Посмотрите на[сравнивая объекты](https://php.net/manual/en/language.oop5.object-comparison.php) раздел документации PHP.

Тем не менее, не будет ли проще отслеживать, что вы изменили, когда вы меняете их?



  
Обратите внимание, что если`$object_1 имеет свойства, которые$object_2` не имеет, приведенный выше код будет выдавать ошибки при попытке доступа к ним.

В таком случае вам нужно будет сначала пересечь`$reflection_1->getProperties() с участием$reflection_2->getProperties()`.



 который занимается только сравнением объектов:

[http://php.net/manual/en/language.oop5.object-comparison.php](https://php.net/manual/en/language.oop5.object-comparison.php)

Также хорошо читать:

<http://www.tuxradar.com/practicalphp/6/12/0>

Я бы сказал, что вы должны использовать метод «клон» при копировании вашего объекта, а затем сравнить его, как сказано в статье php.net.

Также быстрым способом было бы объявление статического метода в классе, который просто сравнивает соответствующие «свойства», например, скажем, «имя пользователя», «пароль», «cookie», ...



Простой пример сравнения класса dto с помощью отражения