LINUX.ORG.RU

PHP7 и бывшие e_strict

 


0

1

Есть быдлокод подобного вида:

<?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, и это уже не очень хорошо. Код отрабатывает верно для обоих классов.

Вопрос. Можно ли это пофиксить малой кровью? Вариант убрать наследование классов держу в уме, но интересно, можно ли иначе.

★★★★★

Последнее исправление: l0stparadise (всего исправлений: 1)

зачем убирать наследование?
Просто пофикси аргументы

kiotoze ★★★★
()

Declaration of B::fun($z) should be compatible with A::fun($x, $y)

Сделай как он требует. За такой код в приличном обществе по морде бьют.

no-such-file ★★★★★
()

Я бы домножил на ноль аффтара этих строк.

Enjoy your polymorphism.

function fun($x, $y = NULL){
	if (is_string($x) && is_string($y)) {
		parent::fun($x, $y);
	} elseif (is_array($x) && is_null($y)) {
		$parentX = $x["x"]; $parentY = $x["y"];
		parent::fun($parentX, $parentY);
	}
}

Northsoft ★★
()
Последнее исправление: Northsoft (всего исправлений: 1)
Ответ на: комментарий от handles

Развернуть сайт на локалке, накатить PHP7, править косяки до потери пульса до появления результатов.

ThisNameWasFree
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.