За последние 24 часа нас посетил 22701 программист и 1009 роботов. Сейчас ищут 720 программистов ...

Эффективность наследованния класса

Тема в разделе "Прочие вопросы по PHP", создана пользователем paradox81ru, 1 мар 2015.

  1. paradox81ru

    paradox81ru Новичок

    С нами с:
    1 мар 2015
    Сообщения:
    2
    Симпатии:
    0
    Здравствуйте. Я бы хотел задать вопрос по поводу эффективности написания PHP кода. Допустим есть класс "A", и от этого класса создается класс наследник "Б". Но, логического смысла в создании класса "Б" нет, тот же функционал можно создать посредством только класса "А", но зато создание класса "Б" приводит к более понятному и красивому коду. Вопрос, насколько затратно в плане производительности интерпретатора PHP создание класса наследника? Стоит ли создавать класс "Б" в пользу понятного кода, но в ущерб производительности?
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Что значит "наследование приводит к более понятному и красивому коду", для начала? Можно пример?
    Реальные применения - это когда есть несколько разных объектов, у которых, при этом, одно API, по сути, и есть одинаковые методы и свойства. Тут, чтобы избежать дублирование кода, имеет смысл вынести всю их общую часть в класс-родитель. Если же есть всего один класс, в котором хочется уменьшить количество методов, при том, что это не несет никакой архитектурной идеи и не будет использовано в дальнейшем, то, Оккам уже наточил бритву.

    В таком вакуумном ракурсе - бесплатно. Производительность зависит от контекста использования и алгоритмов, которые применяешь. От времени жизни объектов. От глубины коллстэка. От тысячи причин. В крайнем случае, если хочешь чисто для интереса, узнать насколько "чистый" класс инстанцируется быстрее производного, то просто напиши простенький тест и делай замеры. Но эти данные не будут носить особую полезную нагрузку.

    Так, например, инклуд пустого файла занимает время, равное вызову 26 пустых функций. Проверено. 26 раз - страшная пропорция. Значит ли это, что нужно отказываться от инклудов? Нет. Речь идет о миллионных долях секунды... Так что это не более, чем "забавный факт".
     
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    Аннушка уже разлила масло. И уже в казённик дослал патрон Тот, кто ждёт давно.

    Забавляют меня эти пастухи шарообразных коней, извините за флуд :) Эффективность имеет смысл только в конкретном контексте — суслик, простите, Фел абсолютно прав!
     
  4. paradox81ru

    paradox81ru Новичок

    С нами с:
    1 мар 2015
    Сообщения:
    2
    Симпатии:
    0
    Спасибо Fell-x27.
     
  5. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Наследование в первую очередь дает возможность использования в дочернем классе методов из базового класса, а теперь представь ты делаешь сайт на котором будут несколько вариантов поиска, допустим простой поиск и расширенный поиск, ты их реализуешь через классы - SimpleSearch и AdvanceSearch, сам поиск работает в них по разному, но часть методов в них идентична (например получение и подготовка данных для поиска и подготовка результата для предоставления пользователю), так зачем держать одинаковые методы в разных классах, сделай для них один базовый - BaseSearch и засунь в него, все что может использоваться одновременно в дочерних классах (SimpleSearch и AdvanceSearch).
     
  6. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Сурикат же. Прошу не распространять дезинформацию.