Помогите пожалуйста реализовать абстрактный класс коллекции.
Хочется написать свой велосипед, чтобы до конца понять, как это должно работать и т.д.
Этот класс должен решить проблемы c типизацией возвращаемых значений метода.
Как я себе это представляю:
class PostCollection extends BaseCollection {
# Устанавливаю тип коллекции,
# при попытке добавить в коллекцию другой тип - выбрасываем исключение
protected static $collectionType = PostItem::class;
}
class PostItem {
//...
}
class Posts {
public function getAllPost() : PostCollection { ... }
}
Также, желательно, чтобы у абстрактного класса таже были реализованы интерфейсы
Iterator,
ArrayAccess,
Countable;
Также планирую добавлять такие методы как
map(),
sort() и т.д.
Готовой реализации не требую. От вас нужна помощь, чтобы подсказали, как правильно нужно реализовать такие коллекции, какие нюансы стоит учесть? Правильно ли я через статическое свойство
$collectionType определяю тип текущей коллекции ?
Или есть какие-то другие варианты ?
Пробовал разобрать, как устроены коллекции в laravel или других фреймворках. Было сложно и непонятно. Очень много кода, предусмотрено все, и на все случаи жизни. Еще и через рефлексию и т.д. Мне хотелось бы минимально рабочую версию реализовать.
За помощь буду очень благодарен!