Создавая интерфейс в Laravel, я не могу заменить дочерний класс на его родительский в функции

#php #laravel #inheritance

#php #laravel #наследование

Вопрос:

Итак, у меня есть тип запроса пользовательской формы, например MakeTeaRequest или MakeCoffeeRequest. Этот пользовательский запрос формы расширяет MakeDrinkRequest.

В новом интерфейсе, который я создаю, я хотел бы определить функцию, которая может принимать любой дочерний элемент MakeDrinkRequest , поэтому я сделал следующее:

 Interface DrinkControllerInterface
{

    public function store(MakeDrinkRequest $request);
    ...
 

Однако в моем классе, который реализует DrinkControllerInterface, когда я пишу функцию хранилища, я получаю следующую ошибку в своей IDE:

public function store(MakeTeaRequest $request)

Объявление должно быть совместимо с DrinkControllerInterface->store(запрос: AppHttpRequestsMakeDrinkRequest)

Я неправильно отношусь к этому с точки зрения дизайна? Или есть что-то еще, что я могу сделать, чтобы разрешить любому дочернему элементу этого класса быть вложенным в родительский класс?

Комментарии:

1. Ссылка: php.net/manual/en/language.oop5.variance.php Вы можете принять только более общее или вернуть более конкретное .

2. Дальнейшее чтение: en.wikipedia.org/wiki /…

3. @Йоши хорошо, я понимаю, спасибо за вашу помощь!