Объявление и типизация аргументов абстрактной функции
Почему нельзя написать вот так?
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 не даёт возможность использовать такую форму записи, вроде с т.з. логики никаких нарушений и двойственных толкований нет.