2

他のオブジェクト参照を含む PHP オブジェクトを比較するために使用できるスタンドアロン コード、またはスタンドアロン フレームワークのライブラリはありますか?

等価演算子は、オブジェクトの同一性をテストするために使用できます。このようなことができるコードを探しています

$a = new Foo;
$b = new Foo;

if(objectsAreEqual($a,b)
{
}

私はこのようなものを使用できることを知っています

get_object_vars($a) == get_object_vars($b)

またはプロパティを比較するための他の形式のリフレクションですが、オブジェクトにネストされたオブジェクトが含まれている場合は、アイデンティティの問題に戻ります。

だから、私が自分自身を実装しようとする前に、これがどこでも解決された問題であることを知りたい.

4

1 に答える 1

2

再帰なしでこれを行う方法はないと思います。

function objectsAreEqual($a, $b) {
    $aProps = get_object_vars($a);
    $bProps = get_object_vars($b);


    foreach($aProps as $k => $v) {
        // check if key exists in b
        if(!isset($bProps[$k]) { 
            return false; 
        }

        // check if they're equal (if not an object or array)
        if($v != $bProps[$k]) {
            return false;
        }

        // if $v is an object or array
        if(is_object($v) || is_array($v)) {
            return objectsAreEqual($v, $bProps[$k]);
        }  

    }   

    return true;
}

必ずこれをテストしてください、しかし私はそれがうまくいくはずだと思います。動作する前に修正する必要がある場合は、ここでもコードを編集してください。

于 2012-07-12T18:34:38.787 に答える