interfaces/IComparable.md


Интерфейс IComparable

Пространство имён: goodboyalex\php_components_pack\interfaces
Версия: 1.0
Доступно с: 1.2

Описание

Интерфейс определяет контракт для классов, которые могут быть сравнены между собой. Предоставляет методы для сравнения объектов по различным критериям.

Методы интерфейса

compareTo()

public function compareTo(mixed $other): int

Описание: Сравнивает текущий объект с переданным объектом.

Параметры:

  • $other (mixed) — объект для сравнения

Возвращаемое значение:

  • int — результат сравнения:
    • 0 — объекты равны
    • -1 — текущий объект меньше
    • 1 — текущий объект больше

Пример использования:

class User implements IComparable
{
    private int $id;
    
    public function compareTo(mixed $other): int
    {
        return !($other instanceof User) ? 1 : $this->id <=> $other->id;
        
    }
}

isEqualsTo()

public function isEqualsTo(mixed $other): bool

Описание: Проверяет равенство текущего объекта с переданным объектом.

Параметры:

  • $other (mixed) — объект для сравнения

Возвращаемое значение:

  • bool — результат сравнения

Пример использования:

class User implements IComparable
{
    private int $id;
    
    public function isEqualsTo(mixed $other): bool
    {
        return !($other instanceof User) ? false : $this->id === $other->id;
        
    }
}

compareByProperty()

public function compareByProperty(string $propertyName, mixed $other): int

Описание: Сравнивает объекты по указанному свойству.

Параметры:

  • $propertyName (string) — название свойства для сравнения
  • $other (mixed) — объект для сравнения

Возвращаемое значение:

  • int — результат сравнения:
    • -1, 0 или 1

Пример использования:

class User implements IComparable
{
    private int $id;
    private string $name;
    
    public function compareByProperty(string $propertyName, mixed $other): int
    {
        return !($other instanceof User) ? 1 : $this->$propertyName <=> $other->$propertyName;
    }
}

Рекомендации по использованию

  1. При реализации интерфейса:

    • Обеспечьте корректную реализацию всех трёх методов
    • Учитывайте типы сравниваемых объектов
    • Реализуйте логику сравнения для всех значимых свойств
  2. При сравнении объектов:

    • Используйте compareTo() для общего сравнения
    • Применяйте isEqualsTo() для проверки равенства
    • Используйте compareByProperty() для сравнения по конкретному свойству

Особенности реализации

  • Методы должны быть реализованы для всех значимых свойств объекта
  • Сравнение должно быть консистентным и предсказуемым
  • Рекомендуется проверять типы объектов перед сравнением
  • Методы должны обрабатывать null-значения корректно

На главную | Содержание