PHP для фронтенд-разработчика

Изучение PHP и соответствующих приемов разработки позволит:

  • увереннее работать с инфраструктурой проекта на PHP;
  • лучше понимать бэкенд-разработчиков и формулировать вопросы/задачи для них;
  • глубже погрузится в разработку на ООП-языке;
  • познакомится с некоторыми практиками промышленной разработки ПО, не характерными для JS, но важными для понимания процесса;
  • познакомиться с основами архитектуры на бэкенде (MVC, Autoloading, Dependecy Iinjection).

Пройдите курс The PHP Practitioner. Пишите код вслед за автором, пересматривайте видео, если с первого раза не поняли. Гуглите интересные или не до конца понятные моменты.

Курс считается пройденным, если вы сможете ответить на контрольные вопросы и показать рабочий код из уроков. Ответы на вопросы подготовьте письменно и выложите вместе с кодом на какой-нибудь гит-сервис.

Контрольные вопросы

  • Переменные
    • Как создать переменную в PHP?
    • Как вывести переменную внутри строки?
  • Файлы
    • Как в PHP разделить код на несколько файлов?
  • Массивы
    • Что такое массив?
    • Что такое ассоциативный массив?
    • Как из массива/ассоциативного массива достать элемент?
  • Функции
    • Что такое функция?
  • Ошибки
    • Что такое эксепшен (исключение)?
    • Как поймать эксепшен и вывести пояснение, если что-то пойдет не так в коде?
  • Классы, ООП
    • Что такое класс?
    • Что такое метод класса? Что такое свойство класса?
    • Зачем нужны публичные, приватные и защищенные методы/свойства?
    • Что такое инстанс (экземпляр класса)?
    • Чем отличается статический метод класса от обычного? Как создать/вызвать статический метод?
    • Как обычно именуют классы?
  • PDO
    • Что такое PDO? Зачем нужен этот класс?
    • Как подключить PDO, чтобы начать с ним работать?
  • Общие
    • Что такое рефакторинг? Для чего он нужен?
    • Что такое API?
    • Что такое принцип единственной ответственности (one responsibility)?
  • Типизация
    • Что такое type hinting (контроль типов)?
    • Для чего нужен type hinting?
    • Как передавать параметр определенного типа?
    • Как передать параметр определенного класса?
  • Конфигурация проекта
    • Почему лучше выносить название базы, пароль и пр. отдельно, а не использовать по месту?
  • Роутинг
    • Что такое роутинг?
    • Зачем нужно выносить этот функционал в отдельный класс/модуль?
    • Что такое URI и в чем его отличие от URL?
    • Как в статическом методе создать экземпляр родительского класса?
    • Что такое чейнинг и как его реализовать? Приведите пример.
  • Вьюхи
    • Какие движки для шаблонизации распространены в PHP?
  • Функции для работы с массивами
    • Сколько функций есть в PHP для работы с массивами?
    • Как отфильтровать массив?
    • Как преобразовать элементы массива (сформировать другой массив на основе текущего)?
    • Как составить массив значений по свойству объекта или ключу массива?
  • Forms, Request Types, and Routing
    • Какие бывают запросы? С какими из них работают чаще всего?
    • Как достать разные части URL?
    • Как сохранить в базу то, что отправлено из формы?
  • Dynamic Inserts With PDO
    • Как в PHP сделать из массива строку, разделенную запятыми?
    • Как в строку Hello, my name is %s, I'm %d передать параметры и что означают %s и %d?
    • Как сделать редирект на определенный URI?
  • Composer Autoloading
    • Что такое Composer? Где он хранит свои настройки?
    • Что нужно сделать, чтобы автоматически загружать все классы по определенному пути? Что это нам дает?
    • Что такое PSR-4 и какие еще бывают PSR?
  • Your First DI Container
    • Когда я добавляю класс в проект, который использует автолоадинг Композера, почему он сразу не работает?
  • Refactoring to Controller Classes
    • Почему не стоит создавать много глобальных функций?
  • Switch to Namespaces
    • Зачем нужны неймспейсы? Что они нам дают?
    • Как указать, что данный класс использует другой класс по неймспейсу?
    • Зачем нужны фреймворки?