interfaces/ISortable.md
Интерфейс ISortable
Пространство имён: goodboyalex\php_components_pack\interfaces
Версия: 2.0
Доступно с: 1.2
Описание
Интерфейс определяет контракт для классов, которые могут быть отсортированы по различным критериям. Наследует интерфейс IHashable для возможности сортировки по хеш-значению.
Методы интерфейса
sort
public function sort (bool $descending = false, string | callable $property = ''): void
Описание: Сортирует элементы класса по указанному свойству.
Параметры:
$descending(bool) — направление сортировки:true— по убыванию;false— по возрастанию (по умолчанию);
$property(stringилиcallable) — имя свойства объекта или функция, возвращающую значение свойства (fn(mixed $a): mixed). Актуально, если внутри объекта, реализующего этот интерфейс, содержатся не примитивы.
ВНИМАНИЕ: Если внутри объекта, реализующего этот интерфейс, содержатся примитивы, то параметр $property должен игнорироваться.
sortCallback
public function sortCallback (callable $callback): void;
Описание: Сортирует массив объектов, по пользовательской функции.
Параметры:
$callback(callable) — функция сравнения, принимающая два параметра:mixed $aиmixed $bи возвращающаяbool-true, если$aдолжно быть перед$bиfalse- если$bдолжен быть перед$a.
Рекомендации по реализации
-
При реализации интерфейса:
- Обеспечьте корректную обработку всех типов данных
- Реализуйте механизмы сравнения значений
- Учитывайте направление сортировки
- Обработайте случай пустой строки в
$property
-
При использовании:
- Проверяйте существование свойств перед сортировкой
- Указывайте корректное направление сортировки
- Используйте callback для сложных условий сортировки
Пример реализации
class ProductList implements ISortable
{
private array $products;
public function sort (bool $descending = false, string | callable $property = ''): void
{
if ($property === '') {
// Сортировка по хешу
usort($this->products, function ($a, $b) use ($descending) {
return $descending ? strcmp($b->hash(), $a->hash()) : strcmp($a->hash(), $b->hash());
});
} else {
usort($this->products, function ($a, $b) use ($property, $descending) {
return $descending ? strcmp($b->$property, $a->$property) : strcmp($a->$property, $b->$property);
});
}
}
public function sortCallback (callable $callback): void
{
usort($this->products, $callback);
}
}
Особенности реализации
- Интерфейс наследует
IHashableдля возможности сортировки по хешу - Поддерживает как строгую, так и callback-сортировку
- Позволяет настраивать направление сортировки
- Должен корректно обрабатывать пустые строки в
$property
Типичные ошибки
- Отсутствие проверки существования свойств
- Некорректная обработка callback-функций
- Отсутствие обработки ошибок сортировки
- Неправильное направление сортировки