オブジェクトの比較

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

大阪 老人ホーム 京都 老人ホーム 兵庫 老人ホーム 和歌山 老人ホーム 滋賀 老人ホーム

奈良 老人ホーム 東京 老人ホーム 神奈川 老人ホーム 千葉 老人ホーム 埼玉 老人ホーム 老人ホーム