Интерфейс PHP: укажите ЛЮБАЯ видимость - программирование
Подтвердить что ты не робот

Интерфейс 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();
    }
}
4b9b3361

Ответ 1

Методы, которые вы объявляете в Interfaces, должны быть общедоступными. Вы определяете контракт с интерфейсом. Любые непубличные методы будут деталями реализации, и они не принадлежат к интерфейсу.

Из Википедии:

Программирование на интерфейс

Использование интерфейсов позволяет программировать стиль, называемый программированием для интерфейса. Идея заключается в том, чтобы основывать логику программирования на интерфейсах используемых объектов, а не на внутренних деталях реализации. Программирование на интерфейс уменьшает зависимость от специфики реализации и делает код более многоразовым. [7] Это дает программисту возможность впоследствии изменить поведение системы, просто заменив объект, используемый с другим, реализующим тот же интерфейс.

Ответ 2

Интерфейс - это контракт между двумя сторонами, соглашение о том, как они общаются.

Нет смысла делать методы защищенными или закрытыми, потому что другая сторона не увидит их.

Ответ 3

Разработчики отключили видимость для повторного использования жидкости. Через ключевое слово implements вы уже привязываете интерфейс к классу. Вы не можете получить доступ к интерфейсу без его реализации в любом случае.