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) {} }
Обсуждают сегодня