2011-11-09 10 views
1

私の夢の1つは、PHPオブジェクトには、豊富な比較(何か__eq__のようなもの)を使用することです。PHPで豊富な比較をすることは可能ですか?

class A { 
    public $a = 1; 

    public function __eq__($other) { 
     return $this->a == $other->a; 
    } 

} 


class B { 
    public $a = 2; 

    public function __eq__($other) { 
     return $this->a == $other->a; 
    } 

} 


class C { 
    public $a = 1; 

    public function __eq__($other) { 
     return $this->a == $other->a; 
    } 

} 

$a = new A(); 
$b = new B(); 
$c = new C(); 

echo $a == $b; //false 
echo $a == $c; //true 

たとえば、データベースIDのモデル(オブジェクト)を高速比較するスマートなメカニズムが必要です。

PHPで何らかの方法で使用できますか?

+1

残念ながら、 PHPのオブジェクトモデルは非常に初歩的です。 – lanzz

+0

'if(object1.isEquals(object2))'のようなことをするのは大したことではありません。 – dynamic

答えて

2

いいえ、そうではありません。これを達成する一般的な方法はequals()メソッドを使用することですが、魔法の方法はありません。手動で呼び出す必要があります。例えば:私が思う、と大差ない

<?php 
class User 
{ 
    private $id; 

    public function __construct($id) 
    { 
     $this->id = $id; 
    } 

    public function getId() 
    { 
     return $this->id; 
    } 

    public function equals(User $user) 
    { 
     return $this->getId() === $user->getId(); 
    } 
} 

$user1 = new User(1); 
$user2 = new User(2); 

var_dump($user1->equals($user2)); // bool(false) 
var_dump($user2->equals($user1)); // bool(false) 
?> 

:それはすべての値を比較するので、とにかく

var_dump($user1 == $user2); 
var_dump($user2 == $user1); 

、私の例では、==演算子を使用していても動作しますプロパティ。

関連する問題