In PHP 5, object comparison is a 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.
    
| 例子 14-6. Example of object comparison in PHP 5 | 
<?phpfunction 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 {
 var $flag;
 
 function Flag($flag=true) {
 $this->flag = $flag;
 }
 }
 
 class OtherFlag {
 var $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);
 ?>
 | 
 | 
    This 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 |