За последние 24 часа нас посетили 17542 программиста и 1724 робота. Сейчас ищут 903 программиста ...

ооп и php

Тема в разделе "Прочие вопросы по PHP", создана пользователем wmlcode, 11 ноя 2007.

  1. wmlcode

    wmlcode Активный пользователь

    С нами с:
    11 ноя 2007
    Сообщения:
    1
    Симпатии:
    0
    Всем добрый вечер!
    Было бы интересно узнать у гуру что является признаками хорошего тона программирования в классах на php. Давно программирую в модулях и недавно начал разбираться в ооп. Знакомый программист глянув в мой класс тут же сказал "во первых призаком хорошего тона является обращение к свойствам через методы". Такие вещи в учебниках не пишут :) интересно сколько еще существует таких правильных и важных тонкостей.. заранее спасиб!
     
  2. Anonymous

    Anonymous Guest

    Знакомый программист - любитель Явы? )
     
  3. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    wmlcode, это является хорошим тоном (а точнее заделом на будущее) в случае если язык не поддерживает геттеры и сеттеры. пхп это не касается...
     
  4. DZEN

    DZEN Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    250
    Симпатии:
    0
    Если говорить о PHP - это он говорил о красивом коде и замедлении сервера ;).
     
  5. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    Яснее?

    Обращение к свойствам через методы действительно стоит выписывать. Чтобы потом при переделке $adres['string'] в $adres['shortstring'] и $adres['longstring'] не переписывать все модули, где он используется. - для того ООП и нужен.

    Если это на тему, что такое сильно тормозит скрипт - пример в студию. Реальный, а не миллион вызовов без обертки.
     
  6. dj--alex

    dj--alex Активный пользователь

    С нами с:
    29 ноя 2007
    Сообщения:
    184
    Симпатии:
    0
    если честно 2 с лишним года пишу, до сих пор не понял для чего нужно писать свои классы и использовать ООП.
    хотелось бы знать для чего используется первое и второе,и причины.

    Чужие классы если приходится разбираю, а вот писать как то не приходилось,хотя возможно где то я просто сделал функции которые выполняют работу классов.
     
  7. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    ооп - это логика, а написана она в классах или функциях - это вторично, хотя кое-чего в функциях будет написать сложно.

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

    Возьмем пример.

    Нам нужен проект с кучей мелких разных (по функционалу) форм.
    Пишем класс, который получает данные и выводит их. Какие - неважно, те что у него есть.
    Сам он создавать объекты никогда не будет и является абстрактным.

    А вот ему наследуют классы simpleform, complexformA, complexformB который представляют вполне рабочие формы с минимальным функционалом.
    Теперь, если нам нужно создать свою новую форму, мы создаем класс myComplexFormA0, который наследует классу complexFormA, до/переписываем ему одну функцию (метод) и подставляем шаблон. Все.

    Почему бы просто не скопировать класс complexFormA ?

    Потому что когда мы захотим переделать его, мы это сделаем в одном месте и все формы, созданные не только нами, но и васями пупкиными, будут продолжать правильно работать.
    тоже самое и с базовым абстрактным классом. Переписали под другой шаблонизатор - остальные этого не заметили.

    Теперь представим, что абстракный класс - работы с базой как самый тупой пример - пишет Вася, шаблонизатор - Петя, а логику формы - миша.
    Вечером они втроем сели и расписали какие методы будут использоваться и разошлись по домам писать.
    Утром Вася принес класс db , Петя класс template, Миша класс form
    Каждый из них использовал ночью класс-заглушку, то есть у Миши были для отладки классы db и template, которые выдавали хоть что-то правильно по структуре, пусть всегда и одно и тоже.
    В результате утром все работает с первого раза, отладка вся была разбита заранее на логически внятные маленькие части с четким распределением что в каком месте обрабатывается и в каком виде выдается. При этом Миша и Петя никогда не видели запроса MySQL, а Вася не знает что означает JS.

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

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    попиишешь лет 10 - поймешь, что разработка в ООП в сотни раз продуманнее и быстрее чем во всем остальном, плюс наращивание функционала при грамотной модели классов не сравнима с другими подходами, но это никоим образом не лишает функций своих преимуществ.
     
  9. dj--alex

    dj--alex Активный пользователь

    С нами с:
    29 ноя 2007
    Сообщения:
    184
    Симпатии:
    0
    просто когда один занимаешься несколькими проэктами можно смело забыть о необходимости свои действия связывать с чьими-то еще + есть привычка, по возможности всегда писать код самому, даже если уже есть какие-то готовые библиотеки для выполнения каких то задач. Правда когда написание так растягивается иногда бывает натыкаешься древнюю часть кода и думаешь какже она легко упрощается.

    А насчет инкапсуляции, я давно уже догадался , что все функции и должны работать как черные ящики :)
    Функцию можно точно также отнаследовать, просто дописать к ней нужный функционал и встроить использование "старой версии"
    У меня до сих пор используется в паре мест вариант который просто вызывает функцию с параметром "old" или "new",где new это просто новый стандарт обработки.

    Большое спасибо за лекцию, теперь я знаю когда стоит применить то что я обычно не использую!
     
  10. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    вот когда стали это реализовывать, получилось ООП. С тех пор его где-то ухитрились улучшить, а где-то испортить, и много народу лепит косяки не понимая логики. Но она (логика) от этого не изменилась. И писать ООП с помощью ООП, не изобретая велосипеды, проще, надо просто въехать в тему ))
     
  11. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    +1

    травы никогда не бывает много (с) 440hz
     
  12. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    а вот это я комментировать не буду - забанят.
     
  13. DZEN

    DZEN Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    250
    Симпатии:
    0
    Сижу и грущу. Да и сердце у меня слабое...
     
  14. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    armadillo
    DZEN
    Что с вами?
     
  15. DZEN

    DZEN Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    250
    Симпатии:
    0
    Вероятно человеку везло на программистов и чужие исходники :).