Зарегистрируйтесь, чтобы продолжить обучение

Микрофреймворки Ключевые аспекты веб-разработки на PHP

Большая часть веба построена по так называемой клиент-серверной модели. Клиент (например, браузер) делает запрос на сервер, сервер готовит ответ и отправляет его обратно. Причем сама обработка зависит, как правило, от того, какой был запрошен адрес и с каким методом http. Чаще всего используются post и get запросы. Ничего страшного, если сейчас вы не до конца понимаете, что значит «метод http». В соответствующем курсе они рассматриваются достаточно подробно.

Грубо говоря, каждому url соответствует определенная функция-обработчик. Типичное веб-приложение можно представить как набор обработчиков, связанных с определенными урлами:

<?php

$handlers = [
  '/' => 'index',
  '/about' => 'about',
  '/users' => 'users'
];

// Где-то здесь проверка входящего урла и вызов обработчика, соответствующего имени в массиве $handlers

Если начать реализовывать эту идею на практике, то окажется что любой веб-сайт содержит в себе много общей логики, которая структурирует приложение:

  1. Принять запрос.
  2. Определить, какой обработчик должен выполниться.
  3. Выполнить обработчик и подготовить ответ.
  4. Вернуть ответ клиенту.

Такую логику действительно выделяют и обзывают каркасом или, по-умному, фреймворком.

Фреймворки — центральная тема профессионального веба. Вот как выглядит код с использованием фреймворка:

<?php

// public/index.php

require_once __DIR__ . '/../vendor/autoload.php';

use Slim\Factory\AppFactory;

$app = AppFactory::create();
$app->addErrorMiddleware(true, true, true);

$app->get('/', function () {
    return 'Main Page';
});

$app->get('/about', function () {
    return 'About Page';
});

$app->run();

Если не обращать особое внимание на кучу незнакомого синтаксиса, можно увидеть общую структуру. Описываются обработчики для метода GET (часть $app->get) с адресами / и /about. На каждый адрес определяется функция-обработчик, которая возвращает строку.

Пример выше сделан с использованием микрофреймворка Slim. Отличие микрофреймворков от фреймворков в том, что все они (на всех языках) устроены подобным образом. Сам код на них простой и требует создания буквально одного файла. Микрофреймворки практически ничего не могут самостоятельно. Любая новая функциональность достигается сторонними библиотеками.

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

Пример, который мы видим, представляет собой полноценный веб-сайт. Да, он примитивный, но все же полноценный. И несмотря на небольшое количество кода и отсутствие какой-либо логики, в ход идут возможности PHP, которые ранее не изучались. К ним относятся аспекты как объектно-ориентированного кода, так и функционального. Причем, что первое, что второе — не просто новый синтаксис, а подходы, существенно влияющие на способ мышления и разработки.

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

Вот лишь некоторые из понятий, которые присутствуют в данном коде:

  • Класс
  • Объект
  • Метод
  • Функции как объекты первого рода
  • Функции высшего порядка

Возможно, чисто синтаксически это не очевидно, но в примере функции-обработчики не просто создаются, но и передаются в другие функции (конкретно в вызов get). Другими словами, определение функции выступает как выражение, а сами функции — данные, точно такие же, как и числа или строки. Именно с этой темы мы начнем наше погружение в язык в следующем курсе.


Самостоятельная работа

Создайте php-проект (используя Composer) с кодом из описания фреймворка https://github.com/slimphp/Slim

  1. Выполните инициализацию проекта.
  2. Установите фреймворк как зависимость.
  3. Создайте файл public/index.php, куда добавьте пример из README (абзац — "Hello World using AppFactory with PSR-7 auto-detection").
  4. Установите пакеты (зависимости) по инструкции из README.
  5. Запустите проект, выполнив команду php -S localhost:5555 -t public в корне проекта.
  6. Откройте страницу http://localhost:5555/hello/mike, а затем http://localhost:5555/hello/john.

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
Программирование на PHP, Разработка веб-приложений и сервисов используя Laravel, проектирование и реализация REST API
10 месяцев
с нуля
Старт 26 декабря

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»