php - 在 PHP 中比较两个对象的最快方法是什么?

标签 php object

假设我有一个对象——在本例中是一个用户对象——我希望能够使用一个单独的类来跟踪更改。 User 对象不应该以任何方式改变它的行为才能发生这种情况。

因此,我的单独类创建了它的“干净”副本,将其存储在本地某处,然后可以将 User 对象与原始版本进行比较,以查看在其生命周期内是否有任何更改。

是否有函数、模式或任何东西可以快速比较 User 对象的两个版本?

选项 1 也许我可以序列化每个版本,然后直接比较,或者散列它们然后比较?

选项 2 也许我应该简单地创建一个 ReflectionClass,遍历该类的每个属性并查看两个版本是否具有相同的属性值?

选项 3 也许有一个简单的 native 函数,如 objects_are_equal($object1,$object2);

最快的方法是什么?

最佳答案

在不修改对象的情况下访问对象的所有(公共(public)、 protected 和私有(private))属性的唯一方法是通过 reflection .如果你愿意,你可以clone修改之前的对象,然后通过使用反射函数循环遍历两个对象之一的不同属性并比较值来比较它们。这将有效地告诉您哪些属性发生了变化。

如果您只关心对象是否已更改,则可以使用 == 或 === 运算符。看看 comparing objects PHP 文档的一部分。

也就是说,在更改它们时跟踪更改的内容不是更容易吗?

关于php - 在 PHP 中比较两个对象的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9866920/

相关文章:

php - php 中有哪些好的分布式队列管理器?

JavaScript 异常 : is not a function

php - 将数据插入 MongoDB 中的内部数组

PHP:搜索所有 Twitter 用户名的字符串并提取它们

javascript - 进入对象或对象的对象的条目和键

python - 附加到特定对象的属性,其中对象存储在字典中

c++ - 如何在程序中动态初始化一个对象?

javascript - 在 HTML Canvas 中重绘对象时出现问题

PHP 表单在 mySQL 中不显示任何内容

php - 如何将 woocommerce 中的 ORDER ID 生成器算法更改为其他算法?