用PHP比较两个StdClass对象

用PHP比较两个StdClass对象,php,json,comparison,stdclass,Php,Json,Comparison,Stdclass,我有两个对象,它们是相同的,但用不同的方法编写。一个是JSON(解码): 其中一个是StdClass: $object2 = (object)[ "null" => null, "int" => 1, ]; 如您所见,它们包含完全相同的结构(键和值)。没有什么不同。所以应该是平等的。但是不是 echo json_encode($object1 === $object2); // -> false 我想也许我错了,JS

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

其中一个是StdClass:

$object2 = (object)[
    "null" => null,
    "int"  => 1,
];
如您所见,它们包含完全相同的结构(键和值)。没有什么不同。所以应该是平等的。但是不是

echo json_encode($object1 === $object2);
// -> false
我想也许我错了,JSON不是一个StdClass。所以我使用了
var\u dump
,但它们仍然是一样的:

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

object(stdClass)#2 (2) {
  ["null"]=>
  NULL
  ["int"]=>
  int(1)
}
现在我很沮丧,我不知道如何比较两个对象,并检测它们之间的变化

可能吗

编辑:

我想如果我将
$object1
JSON
更改为StdClass,可能会奏效,比如第二个:

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

但还是
false

比较对象有两种方法。如果要比较的对象是同一类的同一实例,则使用
==
运算符返回
true
。i、 它们是同一个物体

如果两个对象的所有属性都相等,并且对象是同一类的实例,则使用
==
操作符返回true

您正在比较两个不同的对象,因此
==
将返回false,但
=
应返回true


参考资料:

比较对象有两种方法。如果要比较的对象是同一类的同一实例,则使用
==
运算符返回
true
。i、 它们是同一个物体

如果两个对象的所有属性都相等,并且对象是同一类的实例,则使用
==
操作符返回true

您正在比较两个不同的对象,因此
==
将返回false,但
=
应返回true


参考资料:

阅读-
==
与使用
==
或做相反的阅读-
==
与使用
=
或做相反的事情谢谢你的回答。我必须问——它们有什么不同?使用
==
而不是
==
背后的想法是什么?我认为只有当您使用
==
时,这意味着您希望结果“完全相等”,对象总是通过引用传递。表达式
$obj2=$obj1
传递对
$obj1
的引用,而不是值。通过使用
=
=
这种方式,程序员可以区分两个相同的对象,以及对同一对象的两个引用。无论如何,这(OP的代码)将永远不会工作
echo json_encode($object1==$object2)谢谢你的回答。我必须问——它们有什么不同?使用
==
而不是
==
背后的想法是什么?我认为只有当您使用
==
时,这意味着您希望结果“完全相等”,对象总是通过引用传递。表达式
$obj2=$obj1
传递对
$obj1
的引用,而不是值。通过使用
=
=
这种方式,程序员可以区分两个相同的对象,以及对同一对象的两个引用。无论如何,这(OP的代码)将永远不会工作
echo json_encode($object1==$object2)
$object1 = (object)[
    "null" => null,
    "int"  => 1,
];