嵌套对象的PHP对象相等性


PHP Object Equality for Nested Objects

独立框架中是否有可用于比较包含其他对象引用的PHP对象的独立代码或库?

相等运算符可用于测试对象标识。我正在寻找可以让我做类似的事情的代码

$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;
}

一定要测试一下,但我认为它应该有效。如果你需要在它工作之前修复它,请在这里编辑代码。