Это зависит от того, что выражает ваш интерфейс. Между интерфейсом и классом не должно быть соотношения 1: 1, иначе различие между интерфейсами и классами будет в значительной степени бессмысленным.
Вы определяете интерфейсы абстрактно, чтобы описать ожидания, которые должен выполнить объект. E.g.:
interface Foo {
public function bar();
}
function baz(Foo $foo) {
$foo->bar();
}
Здесь описывается функция baz
, для которой требуется аргумент $foo
, который реализует как минимум один метод bar()
. Чтобы выполнить это требование, вам нужно иметь класс implements Foo
. Этот класс может дополнительно реализовывать другие интерфейсы или реализовывать больше методов, чем просто.
class ConcreteFoo implements Foo, Bar, Baz, Countable, ArrayAccess {
public function bar() { ... }
public function ham() { ... }
...
}
Этот класс выполняет ожидание interface Foo
, в дополнение ко многим другим вещам. Это не должно касаться interface Foo
, ни function baz
. Это называется интерфейс разделения .
Итак, нет, интерфейс не обязательно выражает каждый метод класса, который его реализует.