Объявление и типизация аргументов абстрактной функции

Почему нельзя написать вот так?

abstract class AbstractResultHandler
{
    abstract public function handle(string $name, AbstractRequest $request);
}

и указать в экземпляре класса в функции вторым аргументом конкретный тип класса, который унаследован от AbstractRequest?

сlass ResultHandlerA extends AbstractResultHandler
{
    public function handle(string $name, RequestA $request) //RequestA extends AbstractRequest 
    {
       ...
    }
}

сlass ResultHandlerB extends AbstractResultHandler
{
    public function handle(string $name, RequestB $request) //RequestB extends AbstractRequest 
    {
       ...
    }
}

Такой код вызывает ошибку. Работать будет, если в функциях указать к примеру интерфейс, но тогда теряется информация о том, какой конкретно тип требуется в соотв. функции: рефлексия не поможет, подсказок в IDE не будет и пр., если не использовать PHPDoc.

Короче, вопрос в том, почему php не даёт возможность использовать такую форму записи, вроде с т.з. логики никаких нарушений и двойственных толкований нет.


Ответы (0 шт):