将两个 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)
}
现在我很沮丧,我不知道如何比较两个对象,并检测它们之间的变化。
可能吗?
编辑:
我认为如果我将 $object1
从 JSON
更改为 StdClass,就像第二个一样:
$object1 = (object)[
"null" => null,
"int" => 1,
];
但还是... false
.
有两种比较对象的方法。使用 ===
运算符 returns true
如果您正在比较的对象是相同 class 的相同实例。即它们是同一个对象。
使用 ==
运算符 return 如果两个对象的所有属性都相等,并且对象是相同 class 的实例,则为真。
您正在比较两个不同的对象,因此 ===
将 return 为假,但 ==
应该 return 为真。
参考:https://www.php.net/manual/en/language.oop5.object-comparison.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)
}
现在我很沮丧,我不知道如何比较两个对象,并检测它们之间的变化。
可能吗?
编辑:
我认为如果我将 $object1
从 JSON
更改为 StdClass,就像第二个一样:
$object1 = (object)[
"null" => null,
"int" => 1,
];
但还是... false
.
有两种比较对象的方法。使用 ===
运算符 returns true
如果您正在比较的对象是相同 class 的相同实例。即它们是同一个对象。
使用 ==
运算符 return 如果两个对象的所有属性都相等,并且对象是相同 class 的实例,则为真。
您正在比较两个不同的对象,因此 ===
将 return 为假,但 ==
应该 return 为真。
参考:https://www.php.net/manual/en/language.oop5.object-comparison.php