Тема заглохла вроде бы, меж тем у меня есть вопрос.
Возможно я вообще ерундой страдаю и это совсем не принципиально, однако.
Есть у нас класс коллектор неких сущностей.
interface EntityCollectorInterface {}
class EntityCollector implements EntityCollectorInterface {}
Собственно класс представляет коллекцию обьектов и набор методов для различных манипуляций.
Так же у нас есть класс менеджер сущностей, который так же реализует функции коллекции обьектов + какая-то дополнительная логика.
Логично как бы взять, и унаследовать этот менеджер от коллектора, т.е:
interface EntityManagerInterface extends EntityCollectorInterface {}
class EntityManager extends EntityCollector implements EntityManagerInterface {}
И вот тут мне не нравится то, что наш
EntityManager, как бы дважды реализует
EntityCollectorInterface, первый раз - через наследование
EntityCollector, а второй - через, имплементацию
EntityManagerInterface.
РНР то на это всё равно. Никаких ошибок. Но мне чего то это всё глаз мылит.
Уже думал всю реализацию
EntityCollector переместить в трэйт, как то так:
interface EntityCollectorInterface {}
class EntityCollector implements EntityCollectorInterface {
use EntityCollectorTrait;
}
interface EntityManagerInterface extends EntityCollectorInterface {}
class EntityManager implements EntityManagerInterface {
use EntityCollectorTrait;
}
Но тут теперь глупо выглядит
EntityCollector, т.к он теперь кроме подключения трейта не содержит никакой логики и, по сути, только для этого и нужен.
Короче как вариант кривее/ровнее? Второй вариант можно "выровнять" в РНР7 заменив "не нужный"
EntityCollector на анонимный класс, но РНР7 пока нельзя.