Имплементация абстрактного метода: как изменить тайп-хинтинг?

Есть абстрактный базовый класс Mapper, в нём метод:

abstract protected function doInsert(DomainObject $entry, $table);


Мне надо унаследовать от него класс TaskMapper, который будет еще более точно проверять тип аргумента:

protected function doInsert(Task $task, $table)
{
    ...
}


Но при таком раскладе PHP ругается, что реализация не соответствует родительскому классу. Причем, если в родительском классе не пишу аргументы, то и в наследуемом у метода не должно быть аргументов. Можно как-то это обойти? Чтобы в базовом классе был абстрактный метод, но его аргументы я определял в дочернем классе.
  • Вопрос задан
  • 270 просмотров
Решения вопроса 1
27cm
@27cm
TODO: Написать статус
Можно как-то это обойти?

Нет.
stackoverflow.com/questions/26782722/implements-a-...

В вашей ситуации есть два простых решения:
1. Убрать абстрактный метод из Mapper.
2. Убрать type hinting, описать требуемые типы в комментариях к методам, а тип параметра проверять с помощью instanceof.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы