Сколько не читал об интрефейсах и об абстрактных классах, так и не смогу понять для чего они используются.. Может вы сможете объяснить доступным языком?
Нельзя создать экземпляр абстрактного класса PHP: <?php abstract class Client { } $c = new Client; // Fatal Error я сейчас пишу систему, в ней есть два класса клиентов Sender и Recipient. Но у них должно быть несколько одинаковых методов. эти методы наследуются от класса Client PHP: <?php class Sender extends Client { } class Recipient extends Client { } таким образом, создавать экземпляр класса Client смысла нет - есть смысл только в Sender b Recipient. Чтобы его невозможно было создать, класс Client объявлен абстрактным. Благодаря этому, другому программист, или мне через год сразу станет ясным назначение класса Client.
WildZero В абстрактном классе могуть быть абстрактные методы PHP: <?php abstract public function fn(); они не содержат код и просто описывают структуру. Но могут быть и не абстрактные методы, т.е. нормальные функции, и они будут работать в наследниках.
Разберись вот с этим: http://ru2.php.net/ArrayAccess Если класс реализует интерфейс ArrayAccess, PHP разрешает обращаться к нему, как к массиву PHP: $obj['k'] = 'v'; наследовать можно только один класс PHP: <?php class Player extends User интерфейсов можно имплементировать сколько угодно PHP: <?php class Player extends User implements Human, Male, ArrayAccess потом проверять PHP: <?php if ($obj instanceof Male) интерфейсы просто описывают. Если ты имплементируешь ArrayAccess, но забыл объявить метод offsetSet, получишь фатальную ошибку.
WildZero Сколько ни читал иначе получится, что ты вообще ничего не читал =) а еще у абстрактных классов зачем-то сделана врожденная глобальность и возможность вызывать их методы, что дает забавный способ всякое делать, инкапсулировав.
WildZero не используется, если ты хочешь что-то отрицать. "сколько ни искать - не найдешь" - типичный пример =) WildZero До этого мне ещё далеко да я не к тому. просто не понятно, зачем так сделали, ибо явственно понятно, что сделали специально. Тогда бы можно было бы наследовать, но нельзя было бы вызывать методы, и прототип не сохранял бы значения переменных внутри себя. Т.е. статики в пхп могут использоваться для прототипирования, но являются вполне зрелой самостоятельной личностью.
Всем говорю, и сейчас скажу, учи проектировочную часть а не с бухты барахты создавать классы. Зная назначение классов можно будет не задавать вопросов по поводу интерфейсов и абстрагирования. В помощь С. Макконнелл ("Совершенный код") - масса вопросов отпадёт. igordata Полиморфизм классов это и есть типичный пример Да, кстати, YII фреймворк посмотри там хорошо применены интерфейсы.