警告 |
この拡張モジュールは、
実験的 なものです。この拡張モジュールの動作・
関数名・その他ドキュメントに書かれている事項は、予告なく、将来的な 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 |