将两个 StdClass 对象与 PHP 进行比较

Compare two StdClass objects with PHP

我有两个对象,它们是相同的,但是用不同的方法写的。一种是JSON(解码):

$object1 = json_decode('{"null":null,"int":1}');

还有一个是 StdClass:

$object2 = (object)[
    "null" => null,
    "int"  => 1,
];

如您所见,它们包含完全相同的结构(键和值)。没有什么不同。所以应该是相等的。但是……不是。

echo json_encode($object1 === $object2);
// -> false

我想也许我错了,JSON 不是 StdClass。所以我使用了 var_dump 但它们仍然是相同的:

object(stdClass)#1 (2) {
  ["null"]=>
  NULL
  ["int"]=>
  int(1)
}

object(stdClass)#2 (2) {
  ["null"]=>
  NULL
  ["int"]=>
  int(1)
}

现在我很沮丧,我不知道如何比较两个对象,并检测它们之间的变化。

可能吗?

编辑:

我认为如果我将 $object1JSON 更改为 StdClass,就像第二个一样:

$object1 = (object)[
    "null" => null,
    "int"  => 1,
];

但还是... false.

有两种比较对象的方法。使用 === 运算符 returns true 如果您正在比较的对象是相同 class 的相同实例。即它们是同一个对象。

使用 == 运算符 return 如果两个对象的所有属性都相等,并且对象是相同 class 的实例,则为真。

您正在比较两个不同的对象,因此 === 将 return 为假,但 == 应该 return 为真。

https://3v4l.org/UdFFT

参考:https://www.php.net/manual/en/language.oop5.object-comparison.php