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;
}
}
Рекомендации по использованию
-
При реализации интерфейса:
- Обеспечьте корректную реализацию всех трёх методов
- Учитывайте типы сравниваемых объектов
- Реализуйте логику сравнения для всех значимых свойств
-
При сравнении объектов:
- Используйте
compareTo()для общего сравнения - Применяйте
isEqualsTo()для проверки равенства - Используйте
compareByProperty()для сравнения по конкретному свойству
- Используйте
Особенности реализации
- Методы должны быть реализованы для всех значимых свойств объекта
- Сравнение должно быть консистентным и предсказуемым
- Рекомендуется проверять типы объектов перед сравнением
- Методы должны обрабатывать null-значения корректно