Foo {
public function baz($a, $b) {}
}
Fatal error: Declaration of Bar::baz($a, $b) must be compatible with Foo::baz($a)
А в чём логика? Я понимаю, если бы Foo был интерфейсом, который необходимо соблюдать, но Foo это ведь класс, а в Bar я хочу переопределить метод baz(), почему он должен быть совместим с Foo::baz()?
При этом такой вариант интерпретатор, почему-то, не смущает:
<?php
class Foo {
public function baz(array $a) {}
}
class Bar extends Foo {
public function baz($a) {}
}
$obj = new Bar();
$obj->baz('some string');
Стань разработчиком интерпретатора и сделай, как надо
Второй вариант разрешён LSP. До версии 7.4, кажется, и это было бы ошибкой
В гугле перманентный бан?
Ты про подстановку барбары лисков?
вот так должно быть и тогда не будет вопросов: class Foo { public function baz($a) {} } class Bar extends Foo { public function baz($a, $b = null) {} }
Обсуждают сегодня