HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <p>Продолжаем тему, которую<a>мы начали</a>несколько статей назад. Для тех, кто ещё не бросил изучать язык<strong>PHP</strong>или только начинает этот путь, я подготовил описание второй части программы самостоятельного изучения.</p>
1 <p>Продолжаем тему, которую<a>мы начали</a>несколько статей назад. Для тех, кто ещё не бросил изучать язык<strong>PHP</strong>или только начинает этот путь, я подготовил описание второй части программы самостоятельного изучения.</p>
2 <h3>Временные рамки</h3>
2 <h3>Временные рамки</h3>
3 <p>Данный блок явно займёт у вас больше времени, чем первый. При полноценной практике и регулярном обучении я бы рекомендовал ориентироваться на месяц интенсивной работы как минимум. И помните, что у вас по-прежнему в приоритете стоит<strong>качество знаний, а не скорость чтения материала</strong>!</p>
3 <p>Данный блок явно займёт у вас больше времени, чем первый. При полноценной практике и регулярном обучении я бы рекомендовал ориентироваться на месяц интенсивной работы как минимум. И помните, что у вас по-прежнему в приоритете стоит<strong>качество знаний, а не скорость чтения материала</strong>!</p>
4 <h3>Содержание:</h3>
4 <h3>Содержание:</h3>
5 <ol><li>Объекты и классы.</li>
5 <ol><li>Объекты и классы.</li>
6 <li>Абстрактные классы и интерфейсы.</li>
6 <li>Абстрактные классы и интерфейсы.</li>
7 <li>MVC.</li>
7 <li>MVC.</li>
8 <li>Окружение.</li>
8 <li>Окружение.</li>
9 <li>PDO и ORM.</li>
9 <li>PDO и ORM.</li>
10 <li>Конфигурирование, логи, профилирование, исключения</li>
10 <li>Конфигурирование, логи, профилирование, исключения</li>
11 <li>SOLID, Паттерны.</li>
11 <li>SOLID, Паттерны.</li>
12 <li>Кэширование.</li>
12 <li>Кэширование.</li>
13 <li>Git.</li>
13 <li>Git.</li>
14 <li>Приложение 2.0.</li>
14 <li>Приложение 2.0.</li>
15 </ol><h2>Блок 2. ООП. Вспомогательные системы.</h2>
15 </ol><h2>Блок 2. ООП. Вспомогательные системы.</h2>
16 <p>Во втором модуле программы обучения начинаем работать с ООП и всеми сопутствующими аспектами. Также изучим прикладные и вспомогательные части приложений, без которых в настоящее время не работает практически ни одно современное web-приложение.</p>
16 <p>Во втором модуле программы обучения начинаем работать с ООП и всеми сопутствующими аспектами. Также изучим прикладные и вспомогательные части приложений, без которых в настоящее время не работает практически ни одно современное web-приложение.</p>
17 <h3>Часть 1. Объекты и классы</h3>
17 <h3>Часть 1. Объекты и классы</h3>
18 <p><strong>Задача</strong>: Начало работы с усложнённой структурой кода.</p>
18 <p><strong>Задача</strong>: Начало работы с усложнённой структурой кода.</p>
19 <p><strong>Цель</strong>: Разобраться с ООП-парадигмой, понять, чем объект отличается от простой переменной и какая от этого польза.</p>
19 <p><strong>Цель</strong>: Разобраться с ООП-парадигмой, понять, чем объект отличается от простой переменной и какая от этого польза.</p>
20 <p><strong>Ценность</strong>: Мы открываем совершенно новый подход к программированию. Это открытие требует серьёзного осмысления, так как зачастую программисты используют объекты, оставаясь в процедурном стиле, что в корне неправильно.</p>
20 <p><strong>Ценность</strong>: Мы открываем совершенно новый подход к программированию. Это открытие требует серьёзного осмысления, так как зачастую программисты используют объекты, оставаясь в процедурном стиле, что в корне неправильно.</p>
21 <p>Сразу же учитесь работать со свойствами объекта и его методами, то есть с его состоянием и поведением.</p>
21 <p>Сразу же учитесь работать со свойствами объекта и его методами, то есть с его состоянием и поведением.</p>
22 <p>Усложняйте - заставляйте объекты взаимодействовать.</p>
22 <p>Усложняйте - заставляйте объекты взаимодействовать.</p>
23 <p><strong>Практика</strong>: 1) выяснить, как создаются классы и объекты. 2) разобраться с состоянием объекта, передачей по ссылке. Свойства объекта как отражение состояния. 3) статические свойства и методы - когда они нужны, а когда нет. 4) основные принципы ООП: полиморфизм, инкапсуляция и наследования - что это такое и как реализуется в PHP 5) напишите простую структуру объектов. Например, иерархия геометрических фигур, иерархия сотрудников и т. п. Важно применять наследование, расширяя родительские классы дочерними. 6) ключевые слова static, parent, self, this 7) попробуйте поработать с этой структурой. Какие свойства реально нужны для вызова извне? Что лучше инкапсулировать? 8) UML-нотация как описание объектных структур. 9) тайпхинтинг в свойствах и методах (PHP 7+).</p>
23 <p><strong>Практика</strong>: 1) выяснить, как создаются классы и объекты. 2) разобраться с состоянием объекта, передачей по ссылке. Свойства объекта как отражение состояния. 3) статические свойства и методы - когда они нужны, а когда нет. 4) основные принципы ООП: полиморфизм, инкапсуляция и наследования - что это такое и как реализуется в PHP 5) напишите простую структуру объектов. Например, иерархия геометрических фигур, иерархия сотрудников и т. п. Важно применять наследование, расширяя родительские классы дочерними. 6) ключевые слова static, parent, self, this 7) попробуйте поработать с этой структурой. Какие свойства реально нужны для вызова извне? Что лучше инкапсулировать? 8) UML-нотация как описание объектных структур. 9) тайпхинтинг в свойствах и методах (PHP 7+).</p>
24 <p><strong>Комментарии</strong>: Этот урок потребует от вас довольно много времени на вхождение. Не торопитесь.</p>
24 <p><strong>Комментарии</strong>: Этот урок потребует от вас довольно много времени на вхождение. Не торопитесь.</p>
25 <p>Полезные материалы: -<a>объектно-ориентированное мышление</a>; -<a>Зандстра - на протяжении всего модуля как настольная книга</a>.</p>
25 <p>Полезные материалы: -<a>объектно-ориентированное мышление</a>; -<a>Зандстра - на протяжении всего модуля как настольная книга</a>.</p>
26 <h3>Часть 2. Абстрактные классы и интерфейсы</h3>
26 <h3>Часть 2. Абстрактные классы и интерфейсы</h3>
27 <p><strong>Задача</strong>: знакомимся с важными архитектурными единицами в ООП.</p>
27 <p><strong>Задача</strong>: знакомимся с важными архитектурными единицами в ООП.</p>
28 <p><strong>Цель</strong>: начать проектировать на уровне абстрактных сущностей, а не конечных реализаций.</p>
28 <p><strong>Цель</strong>: начать проектировать на уровне абстрактных сущностей, а не конечных реализаций.</p>
29 <p><strong>Ценность</strong>: гибкие системы немыслимы без абстракций. И урок позволяет начать работать с ними. Более того - он учит проверять себя на правильность проектирования системы.</p>
29 <p><strong>Ценность</strong>: гибкие системы немыслимы без абстракций. И урок позволяет начать работать с ними. Более того - он учит проверять себя на правильность проектирования системы.</p>
30 <p><strong>Практика</strong>: 1. Понять, чем отличаются эти две сущности. 2. На примере п. 4 из прошлого урока подумайте, как можно вынести в абстрактный слой части вашей структуры. 3. Усложняем: применяем полиморфизм. Попробуйте создать массив элементов из вашей структуры. Обойдите массив циклом. Можно ли работать с каждым элементом массива, как с экземпляром его родительского абстрактного класса или же, как с интерфейсом? Буквально: можно ли в ожидаемом типе вместо реального класса указать абстрактный класс или интерфейс? Если нет, то как надо переделать вашу структуру? 4. Какие встроенные интерфейсы предоставляет PHP? Как их использовать? 5. Познакомьтесь с trait-ами.</p>
30 <p><strong>Практика</strong>: 1. Понять, чем отличаются эти две сущности. 2. На примере п. 4 из прошлого урока подумайте, как можно вынести в абстрактный слой части вашей структуры. 3. Усложняем: применяем полиморфизм. Попробуйте создать массив элементов из вашей структуры. Обойдите массив циклом. Можно ли работать с каждым элементом массива, как с экземпляром его родительского абстрактного класса или же, как с интерфейсом? Буквально: можно ли в ожидаемом типе вместо реального класса указать абстрактный класс или интерфейс? Если нет, то как надо переделать вашу структуру? 4. Какие встроенные интерфейсы предоставляет PHP? Как их использовать? 5. Познакомьтесь с trait-ами.</p>
31 <p><strong>Комментарии</strong>: гибкие системы немыслимы без абстракций. И урок позволяет начать работать с ними. Более того - он учит проверять себя на правильность проектирования системы.</p>
31 <p><strong>Комментарии</strong>: гибкие системы немыслимы без абстракций. И урок позволяет начать работать с ними. Более того - он учит проверять себя на правильность проектирования системы.</p>
32 <p><strong>Полезные материалы</strong>: -<a>о применении абстрактных классов</a>; -<a>и ещё немного</a>; -<a>о трейтах</a>.</p>
32 <p><strong>Полезные материалы</strong>: -<a>о применении абстрактных классов</a>; -<a>и ещё немного</a>; -<a>о трейтах</a>.</p>
33 <h3>Часть 3. MVC</h3>
33 <h3>Часть 3. MVC</h3>
34 <p><strong>Задача</strong>: начало работы с фундаментальной архитектурой для web-приложений.</p>
34 <p><strong>Задача</strong>: начало работы с фундаментальной архитектурой для web-приложений.</p>
35 <p><strong>Цель</strong>: разделить приложение на слои для более удобной работы.</p>
35 <p><strong>Цель</strong>: разделить приложение на слои для более удобной работы.</p>
36 <p><strong>Ценность</strong>: любой современный web-фреймворк использует MVC и его разновидности. Поэтому без понимания этой парадигмы далеко не уехать.</p>
36 <p><strong>Ценность</strong>: любой современный web-фреймворк использует MVC и его разновидности. Поэтому без понимания этой парадигмы далеко не уехать.</p>
37 <p><strong>Практика</strong>: 1. Изучить подход. Как реализуется MVC в PHP? Что такое пассивный и активный MVC? Узнать про "уродливый жирный контроллер". 2. Front Controller или единая точка входа для реализации MVC, работа с приложением через инстанс (объект) самого приложения. 3. Структура директорий MVC-проекта. 4. Роутинг в MVC - как обрабатывать и конфигурировать преобразование адресов в команду приложению. 5. Создать самое простое MVC-приложение: отображение 2-3 страниц при помощи единой точки входа и MVC. 6. Разновидности: HMVC, MVP, MVVM.</p>
37 <p><strong>Практика</strong>: 1. Изучить подход. Как реализуется MVC в PHP? Что такое пассивный и активный MVC? Узнать про "уродливый жирный контроллер". 2. Front Controller или единая точка входа для реализации MVC, работа с приложением через инстанс (объект) самого приложения. 3. Структура директорий MVC-проекта. 4. Роутинг в MVC - как обрабатывать и конфигурировать преобразование адресов в команду приложению. 5. Создать самое простое MVC-приложение: отображение 2-3 страниц при помощи единой точки входа и MVC. 6. Разновидности: HMVC, MVP, MVVM.</p>
38 <p><strong>Комментарии</strong>: если есть желание, стоит посмотреть на структуру MVC проектов в сети, чтобы облегчить работу с темой</p>
38 <p><strong>Комментарии</strong>: если есть желание, стоит посмотреть на структуру MVC проектов в сети, чтобы облегчить работу с темой</p>
39 <p><strong>Полезные материалы</strong>: -<a>теория</a>; -<a>и ещё немного</a>.</p>
39 <p><strong>Полезные материалы</strong>: -<a>теория</a>; -<a>и ещё немного</a>.</p>
40 <h3>Часть 4. Окружение</h3>
40 <h3>Часть 4. Окружение</h3>
41 <p><strong>Задача</strong>: получить гибкое окружение.</p>
41 <p><strong>Задача</strong>: получить гибкое окружение.</p>
42 <p><strong>Цель</strong>: научиться работать с виртуальными машинами.</p>
42 <p><strong>Цель</strong>: научиться работать с виртуальными машинами.</p>
43 <p><strong>Ценность</strong>: готовые сборки хороши для быстрого старта, но совершенно не подходят для работы в реальных проектах, так как не предоставляют гибкой настройки, а также часто работают на отличающихся от сервера ОС, что порождает различного рода ошибки несоответствий.</p>
43 <p><strong>Ценность</strong>: готовые сборки хороши для быстрого старта, но совершенно не подходят для работы в реальных проектах, так как не предоставляют гибкой настройки, а также часто работают на отличающихся от сервера ОС, что порождает различного рода ошибки несоответствий.</p>
44 <p>Vagrant поможет сделать первые шаги в автоматизации сборки.</p>
44 <p>Vagrant поможет сделать первые шаги в автоматизации сборки.</p>
45 <p>Composer поможет управлять зависимостями как кодом.</p>
45 <p>Composer поможет управлять зависимостями как кодом.</p>
46 <p><strong>Практика</strong>: 1. Установить VirtualBox и Vagrant. 2. При помощи Vagrant получить рабочую виртуальную машину под управлением Linux (рекомендуются Ubuntu или Debian). 3. Собрать окружение NGINX+PHP-FPM+MySQL. 4. Присвоить доменное имя и научить сервер отвечать на него. 5. Поддержать единую точку входа. 6. Развернуть свой код в систему. 7. Настроить IDE на работу виртуальной машиной и запуском скриптов на ней. 8. Установить Composer. 9. При помощи Composer установить любую библиотеку и попробовать ей пользоваться. 10. Обратить внимание на папку vendor, правила автозагрузки и стандарты PSR-0,4. Также выяснить, чем отличаются composer.json и composer.lock.</p>
46 <p><strong>Практика</strong>: 1. Установить VirtualBox и Vagrant. 2. При помощи Vagrant получить рабочую виртуальную машину под управлением Linux (рекомендуются Ubuntu или Debian). 3. Собрать окружение NGINX+PHP-FPM+MySQL. 4. Присвоить доменное имя и научить сервер отвечать на него. 5. Поддержать единую точку входа. 6. Развернуть свой код в систему. 7. Настроить IDE на работу виртуальной машиной и запуском скриптов на ней. 8. Установить Composer. 9. При помощи Composer установить любую библиотеку и попробовать ей пользоваться. 10. Обратить внимание на папку vendor, правила автозагрузки и стандарты PSR-0,4. Также выяснить, чем отличаются composer.json и composer.lock.</p>
47 <p><strong>Полезные материалы</strong>: -<a>сборка с нуля</a>; -<a>и ещё немного</a>; -<a>Composer для начинающих</a>.</p>
47 <p><strong>Полезные материалы</strong>: -<a>сборка с нуля</a>; -<a>и ещё немного</a>; -<a>Composer для начинающих</a>.</p>
48 <h3>Часть 5. PDO и ORM</h3>
48 <h3>Часть 5. PDO и ORM</h3>
49 <p><strong>Задача</strong>: cтруктурировать работу с хранилищем.</p>
49 <p><strong>Задача</strong>: cтруктурировать работу с хранилищем.</p>
50 <p><strong>Цель</strong>: применить ООП-подход к работе с данными. Выделить запросы и взаимодействия с хранилищем в отдельный слой.</p>
50 <p><strong>Цель</strong>: применить ООП-подход к работе с данными. Выделить запросы и взаимодействия с хранилищем в отдельный слой.</p>
51 <p><strong>Ценность</strong>: хранилище - важная часть приложения. Однако (в идеале) оно не должно накладывать на логику какие-либо ограничения. Поэтому работу с ним стоит вынести в отдельный слой.</p>
51 <p><strong>Ценность</strong>: хранилище - важная часть приложения. Однако (в идеале) оно не должно накладывать на логику какие-либо ограничения. Поэтому работу с ним стоит вынести в отдельный слой.</p>
52 <p>Также стоит отметить обеспечение безопасности при выполнении обновления данных, дабы не допускать SQL и иного рода инъекций.</p>
52 <p>Также стоит отметить обеспечение безопасности при выполнении обновления данных, дабы не допускать SQL и иного рода инъекций.</p>
53 <p><strong>Практика</strong>: 1. PDO - создание соединения, запросы, prepare. 2. Кто должен запрашивать данные: модель или контроллер? 3. ORM (Doctrine, Eloquent) - абстрагирование кода от конкретного хранилища. Установить при помощи Composer. 4. Разделение бизнес-логики в моделях и кода отражения сущностей в БД. 5. Если поменять MySQL на Postgres Ваш проект с ORM продолжит работать? Что нужно сделать, чтобы продолжил? 6. CRUD-операции. Создайте для своего MVC такой функционал, который будет выполнять такую работу.</p>
53 <p><strong>Практика</strong>: 1. PDO - создание соединения, запросы, prepare. 2. Кто должен запрашивать данные: модель или контроллер? 3. ORM (Doctrine, Eloquent) - абстрагирование кода от конкретного хранилища. Установить при помощи Composer. 4. Разделение бизнес-логики в моделях и кода отражения сущностей в БД. 5. Если поменять MySQL на Postgres Ваш проект с ORM продолжит работать? Что нужно сделать, чтобы продолжил? 6. CRUD-операции. Создайте для своего MVC такой функционал, который будет выполнять такую работу.</p>
54 <p>Приложение - Уровень 2</p>
54 <p>Приложение - Уровень 2</p>
55 <p><strong>Полезные материалы</strong>: -<a>Eloquent</a>; -<a>про ORM на Тестере</a>.</p>
55 <p><strong>Полезные материалы</strong>: -<a>Eloquent</a>; -<a>про ORM на Тестере</a>.</p>
56 <h3>Часть 6. Конфигурирование, логи, профилирование, исключения</h3>
56 <h3>Часть 6. Конфигурирование, логи, профилирование, исключения</h3>
57 <p><strong>Задача</strong>: анализировать работу приложения и делать выводы из ошибок.</p>
57 <p><strong>Задача</strong>: анализировать работу приложения и делать выводы из ошибок.</p>
58 <p><strong>Цель</strong>: научиться искать причины ошибок, а также обрабатывать нештатные ситуации.</p>
58 <p><strong>Цель</strong>: научиться искать причины ошибок, а также обрабатывать нештатные ситуации.</p>
59 <p><strong>Ценность</strong>: все приложения содержат ошибки. И чтобы с этими ошибками бороться, требуется искать их причины. Логи и профилирование - самые подходящие для этого инструменты.</p>
59 <p><strong>Ценность</strong>: все приложения содержат ошибки. И чтобы с этими ошибками бороться, требуется искать их причины. Логи и профилирование - самые подходящие для этого инструменты.</p>
60 <p>Конфигурация приложения - это залог гибкости и независимости. Начинаем отвязывать код от сервера, на котором он работает.</p>
60 <p>Конфигурация приложения - это залог гибкости и независимости. Начинаем отвязывать код от сервера, на котором он работает.</p>
61 <p>Исключения же позволяют не убивать приложение в случае нештатной ситуации, отдавая пользователю некрасивую простыню ошибок, а аккуратно обрабатывать такие вещи.</p>
61 <p>Исключения же позволяют не убивать приложение в случае нештатной ситуации, отдавая пользователю некрасивую простыню ошибок, а аккуратно обрабатывать такие вещи.</p>
62 <p><strong>Практика</strong>: 1. Установить Xdebug и попробовать создать ситуацию с ошибкой. 2. Познакомиться с профилированием и Xhprof. 3. Попробовать написать модуль, который будет записывать содержимое переменных и объектов в указанный файл лога. 4. Познакомиться с библиотекой Monolog. 5. Можно ли логировать на проде? 6. Конфигурирование приложения - уберите хардкод (заодно узнаете, что это) и настройки приложения в выделенные файлы. Плейсхолдеры в коде. 7. Механизмы конфигурирования в php - ini-файлы, yaml, xml, json. 8. Как создать конфигурации для разных окружений вашего приложения (среда разработки, среда тестирования, боевая среда)? 9. Механизм исключений - что такое Exception, try-catch-finally, наследование исключений и их проброс. 10. Попробуйте создать режим работы вашего приложения, при котором исключения будут логироваться (режим должен управляться флагом конфигурации)</p>
62 <p><strong>Практика</strong>: 1. Установить Xdebug и попробовать создать ситуацию с ошибкой. 2. Познакомиться с профилированием и Xhprof. 3. Попробовать написать модуль, который будет записывать содержимое переменных и объектов в указанный файл лога. 4. Познакомиться с библиотекой Monolog. 5. Можно ли логировать на проде? 6. Конфигурирование приложения - уберите хардкод (заодно узнаете, что это) и настройки приложения в выделенные файлы. Плейсхолдеры в коде. 7. Механизмы конфигурирования в php - ini-файлы, yaml, xml, json. 8. Как создать конфигурации для разных окружений вашего приложения (среда разработки, среда тестирования, боевая среда)? 9. Механизм исключений - что такое Exception, try-catch-finally, наследование исключений и их проброс. 10. Попробуйте создать режим работы вашего приложения, при котором исключения будут логироваться (режим должен управляться флагом конфигурации)</p>
63 <p><strong>Комментарии</strong>: довольно много тем внутри блока, но все они довольно тесно связаны, так что лучше изучать их вместе.</p>
63 <p><strong>Комментарии</strong>: довольно много тем внутри блока, но все они довольно тесно связаны, так что лучше изучать их вместе.</p>
64 <p><strong>Полезные материалы</strong>: -<a>узнать и полюбить XDebug</a>; -<a>альтернатива XDebug</a>; -<a>о логировании в PHP</a>.</p>
64 <p><strong>Полезные материалы</strong>: -<a>узнать и полюбить XDebug</a>; -<a>альтернатива XDebug</a>; -<a>о логировании в PHP</a>.</p>
65 <h3>Часть 7. SOLID, Паттерны</h3>
65 <h3>Часть 7. SOLID, Паттерны</h3>
66 <p><strong>Задача</strong>: структурировать код и классы.</p>
66 <p><strong>Задача</strong>: структурировать код и классы.</p>
67 <p><strong>Цель</strong>: научиться пользоваться лучшими практиками проектирования приложений.</p>
67 <p><strong>Цель</strong>: научиться пользоваться лучшими практиками проектирования приложений.</p>
68 <p><strong>Ценность</strong>: вы уже наверняка догадались, что просто так накидать классы и разбросать по ним функционал - не лучшая идея. Именно задачу структурирования решает ООП-подход.</p>
68 <p><strong>Ценность</strong>: вы уже наверняка догадались, что просто так накидать классы и разбросать по ним функционал - не лучшая идея. Именно задачу структурирования решает ООП-подход.</p>
69 <p>Многие задачи проектирования в современном программировании уже решены. Поэтому будет большой ошибкой не пользоваться многолетними наработками сообщества.</p>
69 <p>Многие задачи проектирования в современном программировании уже решены. Поэтому будет большой ошибкой не пользоваться многолетними наработками сообщества.</p>
70 <p>Обратите внимание на то, что не стоит пытаться зазубрить паттерны с одного подхода. Они должны основываться на практике, поэтому в процессе обучения обращайтесь к ним на этапе проектирования кода.</p>
70 <p>Обратите внимание на то, что не стоит пытаться зазубрить паттерны с одного подхода. Они должны основываться на практике, поэтому в процессе обучения обращайтесь к ним на этапе проектирования кода.</p>
71 <p>Именно здесь вы должны осознать, что создание приложения начинается задолго до открытия IDE и написания первого класса.</p>
71 <p>Именно здесь вы должны осознать, что создание приложения начинается задолго до открытия IDE и написания первого класса.</p>
72 <p><strong>Практика</strong>: 1. SOLID - из чего он состоит и как реализуется в PHP. Начните с самого простого - все ли Ваши классы, созданные до этого отвечают букве S в аббревиатуре? 2. Singleton - пусть и антипаттерн относительно SOLID, но с него хорошо начинать разбираться в самой сущности паттернов. Напишите прослойку работы с БД при помощи этого паттерна (да, она будет нарушать SOLID, но мы пока учимся) 3. Паттерны - не готовый код, а рекомендации! Мы уже успели неявно познакомиться с Front Controller, например. 4. Типы паттернов (design patterns, architectural patterns, etc) 5. Наиболее популярные и применимые в web: Фабрики, Декоратор, Page Object, DAO, Наблюдатель.</p>
72 <p><strong>Практика</strong>: 1. SOLID - из чего он состоит и как реализуется в PHP. Начните с самого простого - все ли Ваши классы, созданные до этого отвечают букве S в аббревиатуре? 2. Singleton - пусть и антипаттерн относительно SOLID, но с него хорошо начинать разбираться в самой сущности паттернов. Напишите прослойку работы с БД при помощи этого паттерна (да, она будет нарушать SOLID, но мы пока учимся) 3. Паттерны - не готовый код, а рекомендации! Мы уже успели неявно познакомиться с Front Controller, например. 4. Типы паттернов (design patterns, architectural patterns, etc) 5. Наиболее популярные и применимые в web: Фабрики, Декоратор, Page Object, DAO, Наблюдатель.</p>
73 <p><strong>Комментарии</strong>: несмотря на то, что пунктов тут немного, модуль довольно объёмный в плане предстоящей работы.</p>
73 <p><strong>Комментарии</strong>: несмотря на то, что пунктов тут немного, модуль довольно объёмный в плане предстоящей работы.</p>
74 <p><strong>Полезные материалы</strong>: -<a>о паттернах с примерами на PHP</a>; -<a>примеры на Java, но сама суть паттернов разобрана отменно</a>.</p>
74 <p><strong>Полезные материалы</strong>: -<a>о паттернах с примерами на PHP</a>; -<a>примеры на Java, но сама суть паттернов разобрана отменно</a>.</p>
75 <h3>Часть 8. Кэширование.</h3>
75 <h3>Часть 8. Кэширование.</h3>
76 <p><strong>Задача</strong>: кэширование.</p>
76 <p><strong>Задача</strong>: кэширование.</p>
77 <p><strong>Цель</strong>: убрать ненужные обращения к медленным источникам.</p>
77 <p><strong>Цель</strong>: убрать ненужные обращения к медленным источникам.</p>
78 <p><strong>Ценность</strong>: кэширование - дин из базовых инструментов обеспечения высокой производительности веб-приложения за счёт перемещения неизменяемых на некоем промежутке времени данных в более быструю область памяти. Важно разобраться с ним, чтобы обеспечивать работу на небольших серверах, да и просто оптимизировать потребление ресурсов.</p>
78 <p><strong>Ценность</strong>: кэширование - дин из базовых инструментов обеспечения высокой производительности веб-приложения за счёт перемещения неизменяемых на некоем промежутке времени данных в более быструю область памяти. Важно разобраться с ним, чтобы обеспечивать работу на небольших серверах, да и просто оптимизировать потребление ресурсов.</p>
79 <p><strong>Практика</strong>: 1. Когда нужен кэш? БД, API, файловая система. Кэш есть везде. Он должен быть и в вашем приложении. 2. Механизмы кэширования: OPCache, Redis, Memcached. 3. Что кэшировать и на какой срок? Страницы, блоки данных, значения переменных, результаты запросов. 4. Прогрев кэша. 5. Интеграция Memcached и Nginx. 6. Коллизии.</p>
79 <p><strong>Практика</strong>: 1. Когда нужен кэш? БД, API, файловая система. Кэш есть везде. Он должен быть и в вашем приложении. 2. Механизмы кэширования: OPCache, Redis, Memcached. 3. Что кэшировать и на какой срок? Страницы, блоки данных, значения переменных, результаты запросов. 4. Прогрев кэша. 5. Интеграция Memcached и Nginx. 6. Коллизии.</p>
80 <p><strong>Полезные материалы</strong>: -<a>большая и интересная статья о кэшировании</a>; -<a>чуть поменьше, но всё равно полезно</a>.</p>
80 <p><strong>Полезные материалы</strong>: -<a>большая и интересная статья о кэшировании</a>; -<a>чуть поменьше, но всё равно полезно</a>.</p>
81 <h3>Часть 9. Git</h3>
81 <h3>Часть 9. Git</h3>
82 <p><strong>Задача</strong>: версионирование приложения и контроль изменений.</p>
82 <p><strong>Задача</strong>: версионирование приложения и контроль изменений.</p>
83 <p><strong>Цель</strong>: Научиться контролировать работу с изменениями кода, а также применять эти изменения или откатывать их.</p>
83 <p><strong>Цель</strong>: Научиться контролировать работу с изменениями кода, а также применять эти изменения или откатывать их.</p>
84 <p><strong>Ценность</strong>: множество продуктов разрабатывается не в одиночку. И для командной работы процесс управления изменениями просто необходим. Даже при работе в одиночку распространена ситуация, когда нужно откатить изменения до более ранней версси, либо разделить функционал на блоки разработки. Говоря проще: без Git (или иной системы версионирования) в команде работать не получится.</p>
84 <p><strong>Ценность</strong>: множество продуктов разрабатывается не в одиночку. И для командной работы процесс управления изменениями просто необходим. Даже при работе в одиночку распространена ситуация, когда нужно откатить изменения до более ранней версси, либо разделить функционал на блоки разработки. Говоря проще: без Git (или иной системы версионирования) в команде работать не получится.</p>
85 <p><strong>Практика</strong>: - тут я не стал ничего выдумывать, так как для изучения есть отличный<a>онлайн-туториал</a>.</p>
85 <p><strong>Практика</strong>: - тут я не стал ничего выдумывать, так как для изучения есть отличный<a>онлайн-туториал</a>.</p>
86 <h3>Часть 10. Приложение 2.0</h3>
86 <h3>Часть 10. Приложение 2.0</h3>
87 <p>Итак, вы готовы усложнить ваше приложение и написать что-то интересное.</p>
87 <p>Итак, вы готовы усложнить ваше приложение и написать что-то интересное.</p>
88 <p>Вы можете создать, например блог. В нём, помимо пользовательского представления, должен быть интерфейс администратора, система управления баннерами и ссылками, роутинг, человеко-понятные URL, кэширование и прочие вещи, которые вы изучили в рамках данного модуля.</p>
88 <p>Вы можете создать, например блог. В нём, помимо пользовательского представления, должен быть интерфейс администратора, система управления баннерами и ссылками, роутинг, человеко-понятные URL, кэширование и прочие вещи, которые вы изучили в рамках данного модуля.</p>
89 <p>Для того, чтобы ваш код можно было показать будущему работодателю, вы можете вести разработку с применением версионирования на базе Github.</p>
89 <p>Для того, чтобы ваш код можно было показать будущему работодателю, вы можете вести разработку с применением версионирования на базе Github.</p>
90 <h2>Получилось?</h2>
90 <h2>Получилось?</h2>
91 <p>Если Вы читаете это, пройдя все модули, описанные выше, вы готовы к следующему шагу. В 3-м модуле изучения я считаю стоящим рассмотреть начало работы с фреймворками, уделить отдельное внимание вопросам Inversion of Control, более глубоко уйти в архитектуру, рассмотреть CI/CD пайплайны.</p>
91 <p>Если Вы читаете это, пройдя все модули, описанные выше, вы готовы к следующему шагу. В 3-м модуле изучения я считаю стоящим рассмотреть начало работы с фреймворками, уделить отдельное внимание вопросам Inversion of Control, более глубоко уйти в архитектуру, рассмотреть CI/CD пайплайны.</p>
92 <p><em>Если вам интересны эти и другие темы, жду ваших отзывов!</em></p>
92 <p><em>Если вам интересны эти и другие темы, жду ваших отзывов!</em></p>
93  
93