2012-07-12 2 views
2

다른 객체 참조를 포함하는 PHP 객체를 비교하는 데 사용할 수있는 독립 실행 형 코드 또는 독립 실행 형 프레임 워크의 라이브러리가 있습니까?중첩 된 객체에 대한 PHP 객체 동일성

equality 연산자는 ID을 테스트하는 데 사용할 수 있습니다. 나는 나를 내가 속성을 비교하는 반사의

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

또는 다른 형태의 같은 것을 사용할 수 있습니다 알고이

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

if(objectsAreEqual($a,b) 
{ 
} 

처럼 뭔가를 할 수 있도록 할 코드를 찾고 있지만있어 개체의 경우 중첩 된 객체가 포함되어 있으면 ID 문제로 돌아갑니다. 나 자신을 구현하기 전에

그래서, 나는이 해결 된 문제입니다 알고 싶어 한 어느 곳

내가 재귀없이 할 수있는 방법이 생각하지 않는다
+0

엔티티와 값을 확인 하시겠습니까? 성과는 큰 문제입니까? 아마 당신은'serialize ($ a) == serialize ($ b)'를 고려할 수 있을까요? – ghbarratt

답변

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

테스트해야하지만 제대로 작동해야합니다. 작동하기 전에 수정해야하는 경우 여기에서 코드를 편집하십시오.