In PHP 5, object comparison is more complicated than in PHP 4 and more
    in accordance to what one will expect from an Object Oriented Language
    (not that PHP 5 is such a language).
   
    When using the comparison operator (==), 
    object variables are compared in a simple manner, namely: Two object
    instances are equal if they have the same attributes and values, and are
    instances of the same class.
   
    On the other hand, when using the identity operator (===),
    object variables are identical if and only if they refer to the same
    instance of the same class.
   
    An example will clarify these rules.
    
Example 19-32. Example of object comparison in PHP 5 
<?php function bool2str($bool) {     if ($bool === false) {         return 'FALSE';     } else {         return 'TRUE';     } }
  function compareObjects(&$o1, &$o2) {     echo 'o1 == o2 : ' . bool2str($o1 == $o2) . "\n";     echo 'o1 != o2 : ' . bool2str($o1 != $o2) . "\n";     echo 'o1 === o2 : ' . bool2str($o1 === $o2) . "\n";     echo 'o1 !== o2 : ' . bool2str($o1 !== $o2) . "\n"; }
  class Flag {     public $flag;
      function Flag($flag = true) {         $this->flag = $flag;     } }
  class OtherFlag {     public $flag;
      function OtherFlag($flag = true) {         $this->flag = $flag;     } }
  $o = new Flag(); $p = new Flag(); $q = $o; $r = new OtherFlag();
  echo "Two instances of the same class\n"; compareObjects($o, $p);
  echo "\nTwo references to the same instance\n"; compareObjects($o, $q);
  echo "\nInstances of two different classes\n"; compareObjects($o, $r); ?>
 |  
 The above example will output: Two instances of the same class
o1 == o2 : TRUE
o1 != o2 : FALSE
o1 === o2 : FALSE
o1 !== o2 : TRUE
Two references to the same instance
o1 == o2 : TRUE
o1 != o2 : FALSE
o1 === o2 : TRUE
o1 !== o2 : FALSE
Instances of two different classes
o1 == o2 : FALSE
o1 != o2 : TRUE
o1 === o2 : FALSE
o1 !== o2 : TRUE  |  
  |