Возможно ли иметь php богатое сравнение в php? - PullRequest
1 голос
/ 09 ноября 2011

Одна из моих мечтаний - использовать Python-богатое сравнение (что-то вроде __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 

Я хотел бы иметь какой-нибудь умный механизм для быстрого сравнения моделей (объектов)например, для идентификатора базы данных.

Возможно ли это как-то в PHP?

1 Ответ

2 голосов
/ 09 ноября 2011

Нет, это не так.Обычный способ добиться этого - использовать метод 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);

В любом случае, мой пример будет работать даже с использованием оператора ==, так как он будетсравните значения всех свойств.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...