#php #python #comparison #comparable
#php #python #сравнение #сопоставимый
Вопрос:
Одна из моих мечтаний — использовать расширенное сравнение 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. К сожалению, нет. Объектная модель PHP очень рудиментарна.
2. не имеет большого значения делать что-то вроде
if (object1.isEquals(object2))
Ответ №1:
Нет, это не так. Распространенный способ добиться этого — использовать 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);
В любом случае, мой пример будет работать даже с использованием ==
оператора, поскольку он будет сравнивать значения всех свойств.