Интерфейс PHP: укажите ЛЮБАЯ видимость
Я использую интерфейс для набора классов. У меня проблема, потому что я желаю, чтобы в интерфейсе visibility
(То есть: public
, protected
и private
).
Мне нужен родительский метод только для защиты, и мне нужно, чтобы дочерний метод был закрытым, но я получаю сообщение об ошибке
Неустранимая ошибка: Тип доступа для метода интерфейса Baz:: qux() должен быть опущен в < файле с Baz/Bar > .
Я попытался указать другие методы видимости в inteface Baz
и удалив public
, но все они потерпели неудачу.
Есть ли способ сделать это через интерфейс? Если нет, то есть способ, которым я могу объявить его abstract
, я тоже это пробовал, но не смог.
interface Baz
{
public function qux();
}
class Bar implements Baz
{
protected function qux()
{
//do foo
}
}
class Foo extends Bar implements Baz
{
private function qux()
{
parent::qux();
}
}
Ответы
Ответ 1
Методы, которые вы объявляете в Interfaces, должны быть общедоступными. Вы определяете контракт с интерфейсом. Любые непубличные методы будут деталями реализации, и они не принадлежат к интерфейсу.
Из Википедии:
Программирование на интерфейс
Использование интерфейсов позволяет программировать стиль, называемый программированием для интерфейса. Идея заключается в том, чтобы основывать логику программирования на интерфейсах используемых объектов, а не на внутренних деталях реализации. Программирование на интерфейс уменьшает зависимость от специфики реализации и делает код более многоразовым. [7] Это дает программисту возможность впоследствии изменить поведение системы, просто заменив объект, используемый с другим, реализующим тот же интерфейс.
Ответ 2
Интерфейс - это контракт между двумя сторонами, соглашение о том, как они общаются.
Нет смысла делать методы защищенными или закрытыми, потому что другая сторона не увидит их.
Ответ 3
Разработчики отключили видимость для повторного использования жидкости. Через ключевое слово implements
вы уже привязываете интерфейс к классу. Вы не можете получить доступ к интерфейсу без его реализации в любом случае.