2012-07-12 129 views
2

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

equality运算符可用于测试对象标识。我在寻找的代码,将让我做这样的事情

$a = new Foo; 
$b = new Foo; 

if(objectsAreEqual($a,b) 
{ 
} 

我知道我可以使用这样的事情

get_object_vars($a) == get_object_vars($b) 

或一些反射的其他形式的比较特性,但如果对象包含一个嵌套对象,我们又回到了身份问题。

所以,在我试图实现我自己,我想知道的是,这是一个解决的问题在任何地方

+0

你想检查实体和值?性能是一个大问题?也许你可以考虑'serialize($ a)== serialize($ b)'? – ghbarratt 2012-07-12 18:17:12

回答

2

我不认为有一种方法可以做到这一点没有递归:

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

一定要测试这个,但我认为它应该工作。如果您需要在工作之前解决它,请在此处编辑代码。