Ответы пользователя по тегу PHP
  • Какие принципы SOLID здесь нарушены?

    @vgbege
    сразу бросается в глаза O+I я бы сказал
    представь, что после нужно будет считать площадь только маленьких фигур (area < 3) или добавится интерфейс с текстурой и нужно будет считать только пушистые.

    не, формально принцип O пока еще не нарушен, и класс Box можно расширять, добавляя в потомках getTotalAreaSmall и getTotalAreaFluffy. но Box уже сейчас выглядит не просто как Box (который просто хранит фигуры), а как BoxThatCountsColored, а его потомки будут называться BoxThatCountsColoredAndSmallAndFluffy например :)
    Ответ написан
    4 комментария
  • Зачем нужны абстрактные классы и интерфейсы в php?

    @vgbege
    я бы тоже посоветовал начинать не с конца (зачем в языке высокого уровня абстрактные классы и интерфейсы), а с начала - как программирование развивалось от ассемблера/бейсика с кучей переменных и jmp/goto в структурную парадигму, а потом в ооп и зачем там понадобились абстрактные классы и интерфейсы. более того, я в php не спец и не знаю, как в этом слабо типизированном языке эти самые классы и интерфейсы реализованы :)

    прямой ответ на вопрос "зачем" - чтобы реализовать композицию объектов. гуглить dependency injection, inheritance vs composition. вообще, вопрос зачем уже не стоит, сейчас это проверенные временем основы, которые нужно просто знать.

    если на пальцах - в строго типизированных языках переменная типа IMyInterface может хранить экземпляры классов, реализующих IMyInterface. переменная типа MyAbstractClass может хранить экземпляры классов, порожденных от MyAbstractClass.
    к примеру, от абстрактного класса Logger с методом log(s: string) мы можем породить реальные классы Console Logger, EmailLogger, DBLogger, SMSLogger и т.д., а потом подкидывать в девелоперском окружении консольный, а в боевом емейл и т.д.

    надеюсь, я ответил на прямой вопрос и не слишком напряг отсылкой к базовым знаниям :D
    Ответ написан