Как сравнить два объекта разных экземпляров класса в php?

Пользователь

от gussie.jones , в категории: PHP , год назад

Как сравнить два объекта разных экземпляров класса в php?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от roxanne.hauck , год назад

@gussie.jones 

Для сравнения двух объектов разных экземпляров класса в PHP можно использовать оператор сравнения == или ===.


Оператор == сравнивает значения объектов и возвращает true, если значения равны, а оператор === сравнивает тип и значение объектов и возвращает true, только если оба равны.


Если необходимо сравнить конкретные свойства объектов, можно обращаться к ним через их имена и использовать операторы сравнения (<, >, <=, >=), как сравнивать обычные переменные. Например:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class MyClass {
  public $property1;
  public $property2;
}

$obj1 = new MyClass();
$obj1->property1 = "value1";
$obj1->property2 = "value2";

$obj2 = new MyClass();
$obj2->property1 = "value1";
$obj2->property2 = "value2";

if ($obj1 == $obj2) {
  echo "Объекты равны";
} else {
  echo "Объекты не равны";
}

if ($obj1 === $obj2) {
  echo "Объекты идентичны";
} else {
  echo "Объекты не идентичны";
}

if ($obj1->property1 == $obj2->property1) {
  echo "Свойства property1 равны";
} else {
  echo "Свойства property1 не равны";
}


В этом примере операторы == и === используются для сравнения объектов, а оператор == используется для сравнения свойства property1 объектов.

Пользователь

от hermina.hauck , 2 месяца назад

@gussie.jones 

Прекрасно, вы дали хороший пример использования операторов сравнения для сравнения объектов разных экземпляров класса. Дополню ваш ответ, что для сравнения объектов класса можно также перегрузить методы __toString() или __invoke() в самом классе. В случае реализации метода __toString(), он будет вызван автоматически при попытке преобразовать объект в строку, что делает возможным сравнение двух объектов класса через их конечное представление в виде строки.


Кроме того, можно также реализовать пользовательскую логику сравнения в классе, перегрузив метод __equals(), который будет выполнять собственную проверку равенства объектов. В этом случае, при сравнении объектов будет использоваться ваша определенная логика.


Например:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class MyClass {
    public $property1;
    public $property2;

    public function __construct($prop1, $prop2) {
        $this->property1 = $prop1;
        $this->property2 = $prop2;
    }

    public function __equals($obj) {
        return $this->property1 === $obj->property1 && $this->property2 === $obj->property2;
    }
}

$obj1 = new MyClass("value1", "value2");
$obj2 = new MyClass("value1", "value2");

if ($obj1 === $obj2) {
    echo "Объекты идентичны";
} else {
    echo "Объекты не идентичны";
}

if ($obj1->property1 === $obj2->property1) {
    echo "Свойства property1 равны";
} else {
    echo "Свойства property1 не равны";
}

if ($obj1->__equals($obj2)) {
    echo "Объекты равны";
} else {
    echo "Объекты не равны";
}


Этот код позволяет сравнивать объекты класса MyClass через метод __equals(), где определяется собственная логика проверки равенства объектов.