DarkElf Я автор интерфейсов или как? Жгешь. Однако. Из всего топика, в котором я практически не отметился, ты выцепил меня Черт возьми, что ты от меня ожидаешь? Какому интерфейсу я должен соответствовать? Соответствие объекта интерфейсу "сиськи" означает для меня, что я, если захочу, могу трогать сиськи. Но никто не даст гарантий, что в трусах объекта я не найду мужской член, поскольку интерфейс "женские трусы" хоть и есть, но метод возвращает мне несколько не то, что я жду Более того, объекты реализующие интерфейс "девушка" могут вести себя крайне разнообразно и быть даже не девушками Поэтому интерфейс - это не более чем декларация, о том, что объект позволяет с собой так поступать. Ты можешь объекту дарить цветы, можешь водить в ресторан, в кино. Получишь ли ты ожидаемый результат - это вопрос Поскольку мы предполагаем адекватность, то, подарив цветы, я расчитываю, как минимум, на ответную улыбку, а не на хук с левой но, как я уже сказал трижды, гарантий нет
Но в php интерфесы используются как раз для проверки на наличии методов. IteratorAggregate например, или ArrayAccess. А не для защиты от кривых рук программиста, который, когда будет писать плагин к системе, деклалрирует неправильные методы с правильными именами.
Это не важно. Объекты находятся на уровне програмного кода, внесение изменений в программный код само по себе подразумевает, что программист будет делать все правильно. Что толку, если fatal не вылетит при неправильном методе, но вылетит при синтаксической ошибке? =)
сейчас обвинят в неумении абстрактно объяснять очень упрощённо — считай, что интерфейс — некий пользовательский тип данных для объекта. Стандартизация функционала без его конкретной реализации. Способ абстрагироваться от этой самой реализации на момент планирования. Абстракция такая, ага. Способ, гарантирующий, что описанные тобой методы будут присутствовать в реализаии объекта и , одновременно, позволяющий чётко контролировать избыточность и повторяемость кода в этих самых реализациях. А, может, пока не засоряй голову?
из этого можно сделать предположение что в интерфейсе указываются только методы и их свойства которые будут содержать пользовательские классы, так? под пользовательскими я подразумеваю те классы, которые будут написаны либо, допустим мной, либо кем то ещё...короче такой некий шаблон для написания получился...или я снова тупить начал? =)
ну, открой мануал и посмотри http://www.php.net/manual/en/language.o ... rfaces.php в первом же абзаце Вот, только, использование интерфейсов — это скорее технология, а не конкретая реализация, что и влечёт за собой скудность нормальных описаний.
я щас одну такую умную (а может кому-то покажется, что глупую) вещь скажу, тогда может станет ясно. впервые столкнулся с интерфейсами, когда стал использовать COM/OLE. было это в дэлфи. так вот, интерфейс - это по сути способ множественного наследования, коего, к примеру в ОО модели дэлфи не было.
на самом деле некое подобие свойтв в интерфейсе в том же COM есть. их можно реализовать через функции)
это так называемые геттеры/сеттеры - а по сути несусветная глупость. Если вся его логика заключается в присвоении/чтении закрытого свойства - он нахрен не нужен. А ноги растут из "традиционных" ООП языков типа Java, где не было возможностей динамических языков зато было старание формализовать все и вся в рамках своей парадигмы. Между тем, к примеру, в C# уже пришли к неявным get/set для свойств. В PHP мы можем это реализовать при помощи __get/__set PHP: <?php public function __get($name) { $getter = 'get' . ucfirst($name); if (method_exists($this, $getter) { return $this->$getter(); } elseif (array_key_exists($name, $this->props)) { return $this->props[$name]; } else { throw new Exception('property not found'); } } Буде мне где-то потребуется геттер, мне достаточно будет его определить и он автоматически начнет использоваться.
мне тоже это всегда диким казалось. но вроде как это являлось хорошим тоном еще в классическом ооп. хотя если спуститься на уровень ниже, то вызов метода (функции), передача параметра более дорогостоящая операция, чем изменение значения ячейки памяти.