1

我的梦想之一是__eq__在 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 回答