ホームページ  >  記事  >  バックエンド開発  >  PHPオブジェクトの比較

PHPオブジェクトの比較

伊谢尔伦
伊谢尔伦オリジナル
2016-11-23 13:54:241001ブラウズ

PHP 5 のオブジェクト比較は PHP 4 よりも複雑で、望ましい結果はオブジェクト指向言語とより一貫しています。

比較演算子 (==) を使用して 2 つのオブジェクト変数を比較する場合、比較原則は次のとおりです。2 つのオブジェクトの属性と属性値が等しく、2 つのオブジェクトが同じクラスのインスタンスである場合、この場合、2 つのオブジェクト変数は等しくなります。

等価演算子 (===) を使用する場合、これら 2 つのオブジェクト変数は特定のクラスの同じインスタンス (つまり、同じオブジェクト) を指している必要があります。

上記の原則は、次の例を通じて理解できます。

例 #1 PHP 5 のオブジェクト比較

<?php
function bool2str($bool)
{
    if ($bool === false) {
        return &#39;FALSE&#39;;
    } else {
        return &#39;TRUE&#39;;
    }
}
function compareObjects(&$o1, &$o2)
{
    echo &#39;o1 == o2 : &#39; . bool2str($o1 == $o2) . "\n";
    echo &#39;o1 != o2 : &#39; . bool2str($o1 != $o2) . "\n";
    echo &#39;o1 === o2 : &#39; . bool2str($o1 === $o2) . "\n";
    echo &#39;o1 !== o2 : &#39; . 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 "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 two different classes
o1 == o2 : FALSE
o1 != o2 : TRUE
o1 === o2 : FALSE
o1 !== o2 : TRUE

注:

PHP 拡張機能でオブジェクト比較の原則を自分で定義できます。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:PHPの型制約次の記事:PHPの型制約