Действительно ли возможно иметь интерфейс, который имеет частный / защищенные методы?

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

И приблизительно 17 лет назад я позволил своему собственному коду расшириться до 88 столбцов, потому что я начал делать все с помощью , Noweb и 88 столбцов - то, что вписывается в приятно печатный документ с помощью Техаса

, я делаю отступ только двумя пробелами, но дополнительная комната замечательна.

68
задан Duncanmoo 24 January 2018 в 11:06
поделиться

4 ответа

Страница руководства PHP об интерфейсах явно заявляет:

Все методы, объявленные в интерфейсе, должны быть общедоступными; такова природа интерфейса.

Думаю, это объясняет получаемую вами ошибку; -)

119
ответ дан 24 November 2019 в 14:10
поделиться

Интерфейсы используются для описания общедоступных методов класса, реализующего этот интерфейс. У вас никогда не может быть частного метода в интерфейсе. Предполагается, что любые методы в интерфейсе используются и не должны изменяться.

Интерфейсы - это ссылка на PHP, но это стандарт в объектно-ориентированном программировании.

20
ответ дан 24 November 2019 в 14:10
поделиться

Как правило, интерфейс может иметь только открытые члены, потому что единственная функция интерфейса должна быть унаследована.

Из учебника PHPfreaks.com:

PHP5 имеет интерфейсы. Не быть путают с интерфейсами в более общий смысл, ключевое слово интерфейса создает объект, который можно использовать для обеспечить общий интерфейс на классы без необходимости их расширения как с абстрактными классами. Вместо этого реализован интерфейс.

Интерфейсы отличаются от абстрактных классы. Во-первых, они на самом деле не классы. Они не определяют свойства, и они не определяют никакого поведения. Методы, объявленные в интерфейсе должны быть объявлены в классах, которые реализовать это.

Поскольку интерфейс в более общий смысл - это определение того, как объект взаимодействует с другим кодом, все методы должны быть объявлены общедоступными (см. раздел о видимости в этом главу). Используя абстрактные классы, абстрактный метод может иметь любой видимость, но расширяющиеся классы должны использовать свои реализации такая же (или более слабая) видимость. Реализация интерфейса добавляет методы как абстрактные методы для предметный класс, невыполнение приведет к ошибке типа следующее:

Неустранимая ошибка: класс SomeConcreteClass содержит n абстрактных методов и должен поэтому быть объявленным абстрактным или реализовать остальные методы Да, абстрактные классы могут реализовать интерфейсы.

9
ответ дан 24 November 2019 в 14:10
поделиться

интерфейсы являются объявлениями типов. тип - это набор значений плюс набор операций, которые могут выполняться с ними извне. частный метод не вписывается в эту картину.

interface T {
  public /*int*/ function f(array $a);
}
interface U {
  public /*T*/ function g(T $t);
}

class C implements U {
    public function g(T $t) {
        ...
        $x = $t->f();
        ...
    }
}

интерфейсы полезны, потому что они констатируют, ну, интерфейсы объектов. как объекты взаимодействуют со своей средой.

теперь скажем T :: f можно было объявить закрытым. как это было бы полезно для других объектов? его нельзя будет вызвать извне, он не будет частью его интерфейса.

6
ответ дан 24 November 2019 в 14:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: