Если видео недоступно для просмотра, попробуйте выключить блокировщик рекламы.

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

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

<?php

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

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

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

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

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

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

<?php

// public/index.php

require __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.
  4. Запустите проект, выполнив команду php -S localhost:8000 -t public.
  5. Откройте страницу http://localhost:8000/hello/mike, а затем http://localhost:8000/hello/john.
Мы учим программированию с нуля до стажировки и работы. Попробуйте наш бесплатный курс «Введение в программирование» или полные программы обучения по Node, PHP, Python и Java.

Хекслет

Подробнее о том, почему наше обучение работает →