ну у меня слова "перегрузить", "переопределить", "перекрыть" ассоциируются с методами ...
с константами такие ассоциации никак в голове не укладывается. На то они и константы.
А своих работах я вижу, где за счет этой фишки я могу убрать 5-10 строк кода (заменить геттеры), но делать этого не стану, ибо константа должна быть константой
Я не готов описать это в одном сообщение. Если кратко: ООП следует применять исходя из принципов создания четкой и гибкой структуры приложения, что вовсе не означает необходимость инкапсуляциии всего в классы
тогда непонятно зачем вам вообще интерфейс DbCacheStorage, если фактически применить другой объект (например ApcCacheStorage), реализующий этот интерфейс нельзя ибо тогда приложение останется без коннекта к СУБД
Абсолютно согласен с вами, но в реалиях жизни времени на самодокуметирование - нет.
А жизнь облегчить можно так же и докой (даже результат работы phpDocumentor'а может оказаться юзабельнее интерфейсов на видном месте)
>> Было: if (strlen($foo) > Стало: if (!isset($foo{5})) { echo "Foo is too short"; }
в топку такие советы. Сэкономленная наносекунда не покроет расходов времени на формирование мимики на лице программиста, получившего такой код в поддержку
Не слишком самоуверенно?
p.s. всякий раз, когда мой недопровайдер обрубает мне связь - нахожу папочку TTD и погружаюсь в этот безумно интересный мир
class News extends DAO {
const TABLE_NAME = 'news';
static function getTableName()
{
return self::TABLE_NAME;
}
static function getObjects()
{
parent::getTableObjects(self::getTableName());
}
}
но пока удается прожить без этого (возможно лишними усилиями), и я этом рад :-)
>> непереопределенный родительский метод будет знать, что вызывают его из наследника, а не так как сейчас. Сейчас он думает, что его напрямую вызвали.
Один из канонов ООП - инкапсуляция. Ни один метод объекта никогда даже намеком не должен знать откуда его вызвали.
с константами такие ассоциации никак в голове не укладывается. На то они и константы.
А своих работах я вижу, где за счет этой фишки я могу убрать 5-10 строк кода (заменить геттеры), но делать этого не стану, ибо константа должна быть константой
А жизнь облегчить можно так же и докой (даже результат работы phpDocumentor'а может оказаться юзабельнее интерфейсов на видном месте)
туда же ... не все должно быть ООП, но вовсе не по этой причине
в топку такие советы. Сэкономленная наносекунда не покроет расходов времени на формирование мимики на лице программиста, получившего такой код в поддержку
В общем я перестраховываюсь на случай рефакторинга "поднятие метода"
Меня не тянет к ключевому слову interface.
А вдруг я затра обнаружу у всех своих "реализаторов" интерфейса IPrintable, один и тотже метод "::print()" - мне станет жутко неуютно
http://habrahabr.ru/blog/php/38961.html#…
http://habrahabr.ru/blog/php/38961.html#…
это не совсем то, о чем здесь идет дисскусия. Это скорее утилитарное применение, слабо связанное с ООП