1

__eq__私の夢の 1 つは、 php オブジェクトでpython リッチ比較 (のようなもの) を使用することです。

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で何らかの方法で可能ですか?

4

1 に答える 1

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);

とにかく、==すべてのプロパティの値を比較するため、私の例は演算子を使用しても機能します。

于 2011-11-09T12:11:40.993 に答える