2012-07-12 219 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; 
} 

一定要測試這個,但我認爲它應該工作。如果您需要在工作之前解決它,請在此處編輯代碼。