Зачем в PHP разрешили отключать проверку типа аргумента у наследников?

Читаю список изменений PHP 7.2:

2. New Features
========================================

- Core:
. It is now possible to remove argument type annotations when overriding an
inherited method. This complies with contravariance of method argument types
under the Liskov Substitution Principle.
https://wiki.php.net/rfc/parameter-no-type-variance


Зачем они это добавили? В примере по ссылке - какой-то абсурд. Якобы в базовом классе добавляется проверка типа, после чего все наследники ломаются из-за отсутствия объявления типа. Ну ладно, теперь они ломаться не будут, но проверка типа-то в них работать не будет. Я бы еще понял, если бы разрешили переопределение подтипами:

class A
{
    public function doSmth(DateTimeInterface $date, string $str)
    {
        // code
    }
}

class B extends A
{

    public function doSmth(DateTime $date, string $str)
    {
        // code
    }
}


Но так...

Кто-то может дать адекватное объяснение/пример того, зачем они эту фичу сделали?
  • Вопрос задан
  • 363 просмотра
Пригласить эксперта
Ответы на вопрос 1
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
Зачем они это добавили?

This complies with contravariance of method argument types
under the Liskov Substitution Principle.
Ответ написан
Ваш ответ на вопрос

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

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