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 |
|
東京デリヘル 池袋デリヘル 新宿デリヘル 渋谷デリヘル 品川デリヘル
鶯谷デリヘル 大塚デリヘル 立川デリヘル 町田デリヘル 横浜デリヘル 埼玉デリヘル
千葉デリヘル 大阪デリヘル 神戸デリヘル 京都デリヘル 名古屋デリヘル デリヘル
アダルトレンタルサーバー アダルトレンタルサーバー 表札 断熱塗料 UGUISU
大阪 老人ホーム 京都 老人ホーム 兵庫 老人ホーム 和歌山 老人ホーム 滋賀 老人ホーム
奈良 老人ホーム 東京 老人ホーム 神奈川 老人ホーム 千葉 老人ホーム 埼玉 老人ホーム 老人ホーム