comparer les propriétés de l'objet et de montrer les diff en PHP

Je suis à la recherche d'un moyen pour me montrer les différentes propriétés/valeurs à partir d'objets donnés...

$obj1 = new StdClass; $obj1->prop = 1;
$obj2 = new StdClass; $obj2->prop = 2;

var_dump(array_diff((array)$obj1, (array)$obj2));
//output array(1) { ["prop"]=> int(1) }

Cela fonctionne très bien aussi longtemps que la propriété n'est pas un objet ou un tableau.

$obj1 = new StdClass; $obj1->prop = array(1,2);
$obj2 = new StdClass; $obj2->prop = array(1,3); 

var_dump(array_diff((array)$obj1, (array)$obj2))
//Output array(0) { }
//Expected output - array { ["prop"]=> array { [1]=> int(2) } }

Est-il un moyen de se débarrasser de ce, même lorsque la propriété est un autre objet ?!

Habituellement, vous gérer cela avec une méthode dans la classe, comme un equals($object) méthode. Peut-être que vous ne pouvez pas modifier la classe ?
Oh, et lorsque l'on compare les propriétés contenant des objets, comment pensez-vous que les objets sont égaux ? C'est le genre de récursive question... Vous pouvez vérifier si leurs propriétés sont égaux (récursif problème...) ou si elles sont de la même instance (plus fort que de l'égalité).
le code ci-dessus le montant exact que vous testez? si oui, alors $obj1 et $obj2 prop sont le même tableau(1,2). techniquement il n'y a vraiment aucune différence.
correct, mais array_diff ne parvient toujours pas à produire une profondeur totale de diff, même si elles sont différentes. Voir ma réponse ci-dessous.
un autre problème est que, même si array_diff descend récursivement, pour moi ça ressemble, le type coulée de l'objet de tableau n'..

OriginalL'auteur nfo | 2011-05-06