| 警告 | 
この拡張モジュールは、
実験的 なものです。この拡張モジュールの動作・
関数名・その他ドキュメントに書かれている事項は、予告なく、将来的な PHP
のリリースにおいて変更される可能性があります。
このモジュールは自己責任で使用してください。  | 
    PHP 5では、オブジェクトの比較はPHP 4よりも複雑になり、
    オブジェクト指向言語で期待される動作により近くなります。
    (PHP 5はオブジェクト指向言語ではありません)
   
    比較演算子(==)を用いた場合、
    オブジェクト変数は単純に比較されます。つまり、
    同じ属性と値を有し、同じクラスのインスタンスである場合に
    二つのオブジェクトのインスタンスが等しくなります。
   
    一方、identity演算子(===)の場合、
    オブジェクト変数は、同じクラスの同じインスタンスを参照する場合のみ
    等しくなります。
   
    これらの規則を明確にするための例を示します。
    
例 18-3. 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 {     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); ?>
 |  
  | 
    この例の出力は以下のようになります。
    
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 similarly named classes in different namespaces
o1 == o2 : FALSE
o1 != o2 : TRUE
o1 === o2 : FALSE
o1 !== o2 : TRUE  |