PHP 5では、オブジェクトの比較は、オブジェクト指向言語に期待される動作に対応し、
  PHP 4よりも複雑になっています。(ただし、PHP 5はオブジェクト指向言語ではありません。)
 
  比較演算子(==)を使用する際、
  オブジェクト変数は、単純に比較されます。つまり、
  二つのオブジェクトのインスタンスは、
  同じ属性と値を有し、同じクラスのインスタンスである場合に、
  等しいとされます。
 
  一方、一致演算子(===)を使用する場合、
  オブジェクト変数は、同じクラスの同じインスタンスを参照する場合のみ、
  等しいとされます。
 
  これらのルールを明確に示す例を以下に示します。
  
例 19-32. 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 "同一クラスの2つのインスタンス\n"; compareObjects($o, $p);
  echo "\n同じインスタンスへの2つのリファレンス\n"; compareObjects($o, $q);
  echo "\n2つの異なるクラスのインスタンス\n"; compareObjects($o, $r); ?>
 |  
 上の例の出力は以下となります。 同一クラスの2つのインスタンス
o1 == o2 : TRUE
o1 != o2 : FALSE
o1 === o2 : FALSE
o1 !== o2 : TRUE
同じインスタンスへの2つのリファレンス
o1 == o2 : TRUE
o1 != o2 : FALSE
o1 === o2 : TRUE
o1 !== o2 : FALSE
2つの異なるクラスのインスタンス
o1 == o2 : FALSE
o1 != o2 : TRUE
o1 === o2 : FALSE
o1 !== o2 : TRUE  |  
  |