是否有任何独立代码或独立框架中的库可用于比较包含其他对象引用的 PHP 对象?
equality运算符可用于测试对象身份。我正在寻找可以让我做这样的事情的代码
$a = new Foo;
$b = new Foo;
if(objectsAreEqual($a,b)
{
}
我知道我可以使用这样的东西
get_object_vars($a) == get_object_vars($b)
或其他形式的反射来比较属性,但如果对象包含嵌套对象,我们又回到身份问题。
所以,在我尝试自己实现之前,我想知道这是一个已解决的问题
最佳答案
我认为没有递归的方法可以做到这一点:
function objectsAreEqual($a, $b) {
$aProps = get_object_vars($a);
$bProps = get_object_vars($b);
foreach($aProps as $k => $v) {
// check if key exists in b
if(!isset($bProps[$k]) {
return false;
}
// check if they're equal (if not an object or array)
if($v != $bProps[$k]) {
return false;
}
// if $v is an object or array
if(is_object($v) || is_array($v)) {
return objectsAreEqual($v, $bProps[$k]);
}
}
return true;
}
一定要测试一下,但我认为它应该有效。如果您需要在运行之前修复它,也请在此处编辑代码。
关于嵌套对象的 PHP 对象相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11457944/