Есть быдлокод подобного вида:
<?php
class A
{
function fun($x, $y)
{
echo "fun A".$x.$y."\n";
}
}
class B extends A
{
function fun($z)
{
$x = $z['x'];
$y = $z['y'];
echo "fun B".$x.$y."\n";
}
}
$a = new A();
$a->fun('123','456');
$b = new B();
$b->fun(['x' => '123', 'y' => '456']);
?>
Который вполне обоснованно спамит Declaration of B::fun($z) should be compatible with A::fun($x, $y).
Суть проблемы. В php5 это ошибка была strict и гипотетически на нее можно было забить (что, судя по дефолтному error_reporting, делали почти все). Но в php7 такая ошибка перекочевала в warning, и это уже не очень хорошо. Код отрабатывает верно для обоих классов.
Вопрос. Можно ли это пофиксить малой кровью? Вариант убрать наследование классов держу в уме, но интересно, можно ли иначе.