Manuel PHP

Comparaison d'objets

En PHP 5, la comparaison d'objets est plus compliquée qu'en PHP 4 afin d'être plus proche du comportement des langages orientés objet (bien que PHP n'en soit pas un).

Lors de l'utilisation de l'opérateur de comparaison ==, les objets sont comparées de manière simple, à savoir : deux objets sont égaux s'ils ont les mêmes attributs et valeurs, et qu'ils sont des instances de la même classe.

D'un autre coté, lors de l'utilisation de l'opérateur d'identité (===), les objets sont identiques uniquement s'ils font référence à la même instance de la même classe.

Un exemple va illustrer ces règles.

Example#1 Exemple de comparaison d'objets en PHP 5

  1. <?php
  2. function bool2str($bool)  
  3. { 
  4.    if ($bool === false) { 
  5.          return 'FALSE'; 
  6.    } else { 
  7.          return 'TRUE'; 
  8.    }  
  9. }  
  10.  
  11. function compareObjects(&$o1, &$o2)  
  12. { 
  13.    echo 'o1 == o2 : '.bool2str($o1 == $o2)."\n"; 
  14.    echo 'o1 != o2 : '.bool2str($o1 != $o2)."\n"; 
  15.    echo 'o1 === o2 : '.bool2str($o1 === $o2)."\n"; 
  16.    echo 'o1 !== o2 : '.bool2str($o1 !== $o2)."\n";  
  17. }  
  18.  
  19. class Flag  
  20. { 
  21.    public $flag; 
  22.  
  23.    function Flag($flag = true) { 
  24.          $this->flag = $flag; 
  25.    }  
  26. }  
  27.  
  28. class OtherFlag  
  29. { 
  30.    public $flag; 
  31.  
  32.    function OtherFlag($flag = true) { 
  33.          $this->flag = $flag; 
  34.    }  
  35. }  
  36.  
  37. $o = new Flag();  
  38. $p = new Flag();  
  39. $q = $o;  
  40. $r = new OtherFlag();  
  41.  
  42. echo "Deux instances de la même classe\n";  
  43. compareObjects($o, $p);  
  44.  
  45. echo "\nDeux références sur le même objet\n";  
  46. compareObjects($o, $q);  
  47.  
  48. echo "\nInstances de classes différentes\n";  
  49. compareObjects($o, $r);  
  50. ?> 

L'exemple ci-dessus va afficher :

Deux instances de la même classe o1 == o2 : TRUE o1 != o2 : FALSE o1 === o2 : FALSE o1 !== o2 : TRUE Deux références sur le même objet o1 == o2 : TRUE o1 != o2 : FALSE o1 === o2 : TRUE o1 !== o2 : FALSE Instances de classes différentes o1 == o2 : FALSE o1 != o2 : TRUE o1 === o2 : FALSE o1 !== o2 : TRUE


Remonter Remonter
L'éditeur javascript - CSS - Gentoo - Tutoriaux PHP - Tutoriels PHP - Breizh Blog