Здравствуйте. Я бы хотел задать вопрос по поводу эффективности написания PHP кода. Допустим есть класс "A", и от этого класса создается класс наследник "Б". Но, логического смысла в создании класса "Б" нет, тот же функционал можно создать посредством только класса "А", но зато создание класса "Б" приводит к более понятному и красивому коду. Вопрос, насколько затратно в плане производительности интерпретатора PHP создание класса наследника? Стоит ли создавать класс "Б" в пользу понятного кода, но в ущерб производительности?
Что значит "наследование приводит к более понятному и красивому коду", для начала? Можно пример? Реальные применения - это когда есть несколько разных объектов, у которых, при этом, одно API, по сути, и есть одинаковые методы и свойства. Тут, чтобы избежать дублирование кода, имеет смысл вынести всю их общую часть в класс-родитель. Если же есть всего один класс, в котором хочется уменьшить количество методов, при том, что это не несет никакой архитектурной идеи и не будет использовано в дальнейшем, то, Оккам уже наточил бритву. В таком вакуумном ракурсе - бесплатно. Производительность зависит от контекста использования и алгоритмов, которые применяешь. От времени жизни объектов. От глубины коллстэка. От тысячи причин. В крайнем случае, если хочешь чисто для интереса, узнать насколько "чистый" класс инстанцируется быстрее производного, то просто напиши простенький тест и делай замеры. Но эти данные не будут носить особую полезную нагрузку. Так, например, инклуд пустого файла занимает время, равное вызову 26 пустых функций. Проверено. 26 раз - страшная пропорция. Значит ли это, что нужно отказываться от инклудов? Нет. Речь идет о миллионных долях секунды... Так что это не более, чем "забавный факт".
Аннушка уже разлила масло. И уже в казённик дослал патрон Тот, кто ждёт давно. Забавляют меня эти пастухи шарообразных коней, извините за флуд Эффективность имеет смысл только в конкретном контексте — суслик, простите, Фел абсолютно прав!
Наследование в первую очередь дает возможность использования в дочернем классе методов из базового класса, а теперь представь ты делаешь сайт на котором будут несколько вариантов поиска, допустим простой поиск и расширенный поиск, ты их реализуешь через классы - SimpleSearch и AdvanceSearch, сам поиск работает в них по разному, но часть методов в них идентична (например получение и подготовка данных для поиска и подготовка результата для предоставления пользователю), так зачем держать одинаковые методы в разных классах, сделай для них один базовый - BaseSearch и засунь в него, все что может использоваться одновременно в дочерних классах (SimpleSearch и AdvanceSearch).