Почему класс-подсказка класса должна быть на 100% одинаковой с интерфейсом?
Я имею в виду, почему он не может принять реализацию класса в качестве подсказки типа?Тип намека на интерфейс
Для того, чтобы понять,
<?php
interface MyInterface
{
public function doMethod(SomeInterface $a)
{
}
}
class MyClass implements MyInterface
{
public function doMethod(ClassThatImplementsSomeInterface $a)
{
}
}
Ошибка: Fatal error: Declaration of MyClass::doMethod() must be compatible with that of MyInterface::doMethod()
Поскольку тип класса намекая реализует SomeInterface
, я ожидаю, что это не нарушает контракт.
Зачем мне это нужно? Из-за преимуществ гибкости интерфейса.
То же самое касается абстрактного класса.
Если я переписал код, чтобы метод «делать» не имел подсказки типа, я знаю, что он «исправит» его.
Но, как-то я думаю, я должен определить контракт, что тип-намек $a
должен реализовать SomeInterface
.
И, почему бы мне просто не использовать тот же тип-намек, который является SomeInterface
?
Это потому, что есть методы, которых нет в SomeInterface
, которые мне нужны.
Итак, в чем смысл этого ограничения?
воспроизводимое codepad: http://codepad.org/2PLd8AmV
Я добавил некоторую информацию, хороший вопрос! – DanFromGermany
В вашем интерфейсе говорится: «Я воспользуюсь одним из этих благодарностей», и вы сказали: «Да, я использую один из них вместо этого» ... Я не вижу, где вопрос – Dale