Magazine Internet

PHP : La comparaison d'objets

Publié le 07 septembre 2009 par Methylbro

Comme PHP n'intègre pas (encore) de méthode pour effectuer une surcharge d'opérateur comme cela peut être le cas dans d'autres langages. Nous allons nous concentrer uniquement sur la comparaison d'objets via les opérateurs d'égalité et d'identité (==, ===, !=, !==).

Pour nos exemples, nous utiliserons la petite classe suivante :

class stdObject {
protected $x,$y;
public function __construct($x, $y) {
$this->x = $x;
$this->y = $y;
}
}

Comparaison d'objets en PHP4

Pour commencer, en PHP4 la comparaison d'objet est simpliste. Deux objets sont considérés comme égaux s'ils sont tous deux l'instance d'une même classe avec des valeurs égales pour chaque propriétés.

Soit par l'exemple suivant (en PHP4) :

$A = new stdObject(1,1.5);
$B = new stdObject(1,1.5);
$A == $B : TRUE
$A != $B : FALSE
$A === $B : TRUE
$A !== $B : FALSE
$C = new stdObject(1,1.5);
$D = new stdObject(1,1);
$C == $D : FALSE
$C != $D : TRUE
$C === $D : FALSE
$C !== $D : TRUE

Comparaison d'objets en PHP5

Cependant, dans notre premier exemple les objets $A et $B, même s'ils sont égaux ne sont pas identiques. PHP5 va donc se compliquer un peu plus la comparaison d'objets en dissociant l'opérateur d'égalité (==) avec celui d'identité (===).

En PHP5, deux objets pourront être alors égaux mais pas forcément identiques. C'est-à-dire que deux objets peuvent être deux instances d'une même classe avec des valeurs égales pour chacune de leurs propriétés sans toutefois faire référence à une instance identique.

Soit l'exemple suivant (en PHP5) :

$C = new stdObject(1,1.5);
$D = new stdObject(1,1.5);
$C == $D : TRUE
$C != $D : FALSE
$C === $D : FALSE
$C !== $D : TRUE
$E = $D;
$E == $D : TRUE
$E != $D : FALSE
$E === $D : TRUE
$E!== $D : FALSE

Conclusion

Nous venons donc de voir la différence subtile entre PHP4 et PHP5 lors de la comparaison d'objets. En POO, et particulièrement en PHP, comprendre les mécanismes liés au stockage en mémoire de vos objets (références, garbage collector etc) est indispensable.


Retour à La Une de Logo Paperblog

A propos de l’auteur


Methylbro 17 partages Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Dossier Paperblog