Читаю список изменений 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
}
}
Но так...
Кто-то может дать адекватное объяснение/пример того, зачем они эту фичу сделали?