parschakov
@parschakov
Начинающий изучать PHP

Как въехать в программирование (ООП, паттерны)?

Здравствуйте. Программирую около 2-3 лет на PHP, дошел до фреймворка Laravel (разобрался с контроллерами, роутами REST, модели ORM...), прошел несколько курсов по нему, разобрался с GIT и Composer. Но понимаю, что не хватает все же понимания основ программирования, не знаю как лучше выразить это чувство :)

Хотел бы попросить вас подсказать, что лучше почитать, посмотреть, чтобы вникнуть в суть ООП, понять объектно-ориентированное мышление, разобраться с паттернами проектирования и их реализацией.

К примеру, научился применять Dependency Injection в конструкторе контроллера, но нет понимая как это работает и для чего это делается.

Прошу помощи! Кто чем может :)
Заранее благодарю за советы и потраченное время.
  • Вопрос задан
  • 3574 просмотра
Решения вопроса 4
  • GTRxShock
    @GTRxShock
    Full-stack developer (Symfony, Angular)
    если программируете на php 2-3 года, то пора бы перед сном почитать РНР: объекты, шаблоны и методики программирования (Зандстра) желательно в бумажном варианте.

    + Паттерны проектирования (Фримен) для общего/наглядного понимания паттернов
    + www.phptherightway.com основные тезисы
    + Рефакторинг: улучшение проекта существующего кода (Фаулер) & https://refactoring.guru/ru на будущее, к чему стремиться :)
    Ответ написан
  • @alexfilus
    Разрабатываю сайты на 1С-Битрикс
    Я проникся ООП когда писал одну программулину в процедурном стиле и внезапно понял что не могу разобрать свой собственный код, написанный вчера. Потратил на рефакторинг 12 часов и после этого код стал больше похож на английский язык, чем на непонятный набор букв, точек, цифр и скобочек. Так что в идеале нужна практическая задача на чистом языке, без фреймворков.
    Раз речь о PHP, попробуйте написать свою ORM. Простейший построитель запросов для CRUD, но универсальный. Как минимум наследование точно поймёте.
    По паттернам я сейчас толкового курса сходу не нашёл, но не переоценивайте их значимость. Лучше почитайте (посмотрите видео) о том, что такое SOLID.
    Когда придёт понимание что такое наследование и зачем оно нужно, тогда можно и про паттерны почитать, но как по мне, реально интересен только Одиночка. Все остальные это просто правильные способы применить наследование, и выглядят довольно очевидными.
    Ответ написан
  • parschakov
    @parschakov
    Начинающий изучать PHP
    про SOLID действительно очень интересно, понравилось объяснение от Дмитрия Афанасьева, оставлю ссылку на плейлист здесь думаю будет интересно подписавшимся на вопрос.
    Ответ написан
  • @Wentixon
    Шаблоны проектирования с человеческим лицом
    К сожалению, не успел к началу вопроса, многое уже посоветовали, но эту статейку вроде не успели еще кинуть. Недавно нашел ее и просто поразился как просто и доступно это изложено + с примерами кода на php. Просто шикарный перевод великолепной статьи!

    От себя же хочу сказать, что единственный способ понять паттерны - это столкнуться с проблемами которые они решают, ибо паттерны ни что иное как шаблоны решения каких то проблем (и предотвращения). Так что делаем вывод - нет проблем, не может быть и решений (конечно, вы просто не осознаете, что они есть, так как проект растет довольно медленно и чаще это какие то правки или добавление нового функционала, который не зависит от старого). Я очень долго пытался с ними разобраться, пробовал читать все перечисленные книги, но вроде читаешь такой и типа понимаешь, но с другой стороны какбы и нет. Вроде понятно, но где это применять хрен знает. Вообщем, как уже сказали, нужны реальные проблемы и тогда открываешь книгу с решениями этих проблем и думаешь какое решение выбрать. Это как с рецептами.. Хочешь что то приготовить, можешь как бы и сам, но не факт, что вкусно получится, тогда открываешь книгу проверенных рецептов и начинаешь применять все по шагам, опираясь при том на ингридиенты, которые у тебя имеются.

    Так что посоветую 2 варианта изучения.
    1) Тупо работаешь над сложные проектами, только действительно сложными, а не сайтиками на cms. И со временем ты начинаешь встречаться с проблемами. Тогда открываешь паттерны и тебе не придется даже как то их особо понимать, потому что это будет естевственно для тебя. Я думаю ты используешь ide вместо редактора кода. Но к примеру я помню тот момент, когда я пользовался саблаймом и знал, что есть ide, но я писал на тот момент простые вещи и когда мне говорили, почему я не юзаю ide, ведь в ней столько всего, я не понимал их потому что мне и саблайма за глаза хватало. Но пришло время, когда надо было то и се и саблайма стало мало. И тут открываю ide, а там уже есть все необходимое и думаешь в такие моменты, как я раньше этим не пользовался. А дело в том, что раньше и не надо было. Может неудачный пример, но вы поняли ) Конечно, этот вариант изучения не совсем реален, по скольку сложный проект еще найти надо, да еще попасть в команду, которая не говнокодит, так как и крупные проекты бывают достаточно плохо написаны. Но можно как вариант к примеру делать свою cms и применять в ней как можно больше паттернов.

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

    Также советую четко понять uml диаграммы. Таким образом, чтобы освежить паттерн вы не будете читать примеры, а просто посмотрите диаграмму и сразу вспомните, зачем он нужен и как его можно реализовать.
    Вот пожалуй и все
    Ответ написан
Пригласить эксперта
Ответы на вопрос 6
  • solotony
    @solotony
    code for food, caviar preferably
    проблема понимания ООП на 90% - в плохих переводах которые делаются хрен знает кем и хрен знает как. зачастую люди вообще слабо понимают о чем пишут (переводят) либо у них проблемы с языком изложения.
    либо авторы страдают неудержимыми приступами графомании.

    почему-то мне кажется что все ООП можно изложить схематически на 3-х тетрадных листочках

    Я сам изучал ООП на С++ (по страуструпу лет 25 назад), но парадигмы остаются такими же - наследование, инкапсуляция, полиморфизм.

    а Dependency Injection - просто как мычание. "в объект при его создании (как правило при создании ) передаются объекты от которых он зависит"
    Ответ написан
  • dimovich85
    @dimovich85
    Занимаюсь фронтенд разработкой
    Советую посмотреть вот это видео и остальные видео и плейлисты на этом канале, бесплатно и очень наглядно: https://youtu.be/zWjT_2hFkMw
    Ссылка об объектах в js, но суть ООП описана как по мне очень понятно. По php тоже есть материал.
    Ответ написан
  • toxicmt
    @toxicmt
    CTO at hexlet.io
    Если вы хотите по настоящему серьезного фундаментального и взорослого. То возьмите книгу Бенджамина Пирса "Типы в языках программирования". Сначала испугайтесь как следует, а затем перемотайте до главы "ООП".
    Ответ написан
  • @novrm
    Если вы начали дублировать одинаковый код в проекте - значит вы не до конца поняли ООП и патерны проектирования.
    Избавление от дублирования одинакового кода в проекте - главный мотиватор искать решение в ООП и шаблонах.
    Ответ написан
  • @EvGenom
    Чтобы понять, как работает -> Берёте свой код и прогоняете его в IDE с точками останова.
    Чтобы понять, для чего это делается -> РНР: объекты, шаблоны и методики программирования + Приёмы ООП. Паттерны проектирования ( не обращайте внимение на год 2001, эта книга ещё актуальна )
    Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
Вакансии с Моего Круга Все вакансии
Заказы с Фрилансим Все заказы