Использование переменных аргументов в переопределении (не вариадического) метода

Я пытаюсь переопределить класс, который использует традиционный список аргументов. Чтобы учесть изменения в сигнатуре базового метода (которую я не могу контролировать и которую можно изменить, но мне нужно ее переопределить), я пытался использовать переменные аргументы, например:

class A {
public function demo($a) {}
}

class B extends A {
public function demo(...$args) {}
}

Тем не менее, это испускает строгую ошибку,

Declaration of B::demo(...$args) should be compatible with A::demo($b)

Исходя из моего понимания принципа подстановки Лискова, мой код должен быть разрешен — любой код, который должен вызывать A::demo смело мог позвонить B::demo, без каких-либо ошибок.

Есть ли недоразумение с моей стороны, или просто никто не удосужился реализовать поддержку этого (предположительно) крайнего случая в компиляторе PHP?

Я знаю, что я могу использовать func_get_args() вместо этого, чтобы эмулировать это поведение, не раздражая компилятор, но я хотел бы знать, почему этот подход не работает (и func_get_args медленнее).

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]