Почему интерпретатор PHP ругается, и говорит, что метод boo() должен быть опущен? Или его надо делать public! Тогда какой толк от таких интерфейсов? Я же хочу показать через интерфейс все функции используемые в классе. PHP: <? interface IA { public function foo(); private function boo(); } class A implements IA { public function foo() { //...... } private function boo() { // ..... } } ?> В абстрактных классах тоже самое: требует чтобы метод был с модификатором доступа public или был опущен. Не могу понять, как по-человечески использовать абстрактные классы и интерфейсы.
Все методы в интерфейсах должны быть public иначе какой в них смысл? Интерфейс определяет, что должен уметь класс его реализующий. Что мы можем сделать с объектом такого класса. Если же мы запишем в интерфейс private метод, то получим метод, к которому не сможем получить доступ. Таким образом мы заставим программиста реализовывать лишний метод, который нигде не используется.
Идея была такая. Есть класс, в нем куча методов. В интерфейсе прописать названия всех этих методов, чтобы другой человек не рылся в коде для установке того, сколько методов в классе и какие они. И я хотел в интерфейсе описать, собственно, интерфейс класса. Но по логике у меня некоторые методы идут с модификатором private. А оказывается в интерфейсе или в абстрактном классе методы с private не котируются. Если я его оставлю private, не пропишу в интерфейсе, тогда получается, толку не много, опять интерфейс не даст полного представления о классе. Есть какие-нибудь выходы?
Зачем другому человеку знать какие методы есть у класса? 1. Для того чтобы создавать объекты этого класса и с ними работать? Тогда ему private методы не нужны и интерфейс здесь хорошо подойдет. 2. Для того чтобы исправлять/расширять класс? Тогда: 2.1. Использовать какой либо редактор, позволяющий сворачивать блоки. Свернуть все методы и вот оно, то что требовалось. 2.2. Cуществуют готовые программы, которые выдернут объявление метода из класса.
С интерфейсами можно сделать так: PHP: <?php interface a { public function a($var); } interface b { public function b($var); } class c implements a,b { public function a($var) { echo $var; } public function b($var) { echo $var; } }
определять не публичные методы в интерфейсе не имеет смысла. определять приватные методы в абстрактном классе не имеет смысла. для этого используется документация а не парадигмы ООП