somemo programming etc.

プログラマ、雑記、プログラミング関係はLinkから、数式はこっちでまとめていることが多い

【php】オブジェクトの比較

オブジェクトの比較について調べてみました。結論としては、参考のマニュアルどおりです。

テスト用コード

オブジェクトの比較用に以下のテストコードを作成しました。といってもTDDからの抜粋です。

public function testPairEquals() {
    $p1 = new Pair('USD', 'CHF');
    $p2 = new Pair('USD', 'CHF');

    $this->assertEquals($p1, $p2);
    $this->assertTrue($p1 == $p2);
    $this->assertTrue($p1 === $p1);
    $this->assertFalse($p1 === $p2);

    $p3 = new Pair('CHF', 'USD');
    $this->assertNotEquals($p1, $p3);
}
<?php
class Pair {

    private $from;
    private $to;

    function __construct($from, $to) {
        $this->from = $from;
        $this->to   = $to;
    }
}

結果

テストコードはすべて通りました。これより、

  • メンバ変数の値まで合っていると等価である
  • 厳密に比較する場合、同じオブジェクトを参照していると等価である
  • assertEqualsは、==による比較である(おそらく、assertNotEqualsも同じ)

ということがわかりました。phpならではの比較に気をつけなくてはいけないことが学べました。

参考