PHP - язык веб-разработки
Основы языка
Что такое PHP?
PHP (аббревиатура от Hypertext Preprocessor) представляет собой скриптовый язык программирования общего назначения. Основная сфера применения языка заключается в разработке веб-приложений. Код PHP встраивается непосредственно в HTML-разметку. Веб-сервер обрабатывает этот код перед отправкой страницы пользователю.
Страница содержит HTML-разметку со встроенными инструкциями PHP. Эти инструкции выполняют полезную работу, например, выводят динамический текст или обращаются к базе данных. PHP-код отделяется начальным и конечным тегами <?php и ?>. Эти теги служат инструкциями начала и завершения обработки кода. Они разрешают интерпретатору входить в режим выполнения PHP-кода и выходить из него.
Язык обладает открытым исходным кодом. Сообщество разработчиков поддерживает актуальность языка и выпускает регулярные обновления. Спецификация языка доступна для свободного изучения и модификации.
PHP работает на сервере. Когда вы открываете сайт, ваш браузер отправляет запрос на сервер. Сервер запускает PHP-скрипт, тот что-то делает (например, читает данные из базы), формирует готовую HTML-страницу и отправляет её вам. Вы никогда не увидите исходный код PHP — только результат его работы.
Исходный код PHP никогда не передаётся браузеру. Пользователь получает только результат его выполнения — обычно это HTML, но может быть и JSON, XML, изображение или любой другой формат.
Вот как выглядит самый простой PHP-скрипт:
<?php
echo "Hello, World!";
?>
Этот код можно сохранить в файл с расширением .php, например index.php, разместить на сервере и открыть в браузере. В ответ вы увидите надпись:
Hello, World!
Разберём детали:
<?php— это начальный тег. Он говорит серверу: «всё, что дальше — это PHP-код».?>— конечный тег. После него интерпретатор перестаёт выполнять PHP и возвращается к обычному режиму (например, выводу HTML).echo— команда для вывода текста.
Примечание: если файл состоит только из PHP-кода и завершается им, конечный тег ?> часто опускают. Это считается хорошей практикой, потому что предотвращает случайный вывод лишних пробелов или переносов строк после тега.
PHP особенно удобен тем, что его можно вставлять прямо в HTML. Например:
<!DOCTYPE html>
<html>
<head>
<title>Мой сайт</title>
</head>
<body>
<h1>Привет, <?php echo "Анна"; ?>!</h1>
<p>Сегодня <?php echo date("d.m.Y"); ?>.</p>
</body>
</html>
Когда сервер обработает этот файл, он выполнит PHP-части и отправит браузеру чистый HTML:
<!DOCTYPE html>
<html>
<head>
<title>Мой сайт</title>
</head>
<body>
<h1>Привет, Анна!</h1>
<p>Сегодня 22.03.2026.</p>
</body>
</html>
Такой подход позволяет создавать шаблоны страниц, где часть контента — статична (HTML), а часть — динамична (PHP).
Иногда можно встретить такой синтаксис:
<?= "Hello!" ?>
Это короткая запись для <?php echo "Hello!"; ?>. Она называется short echo tag.
Хотя она короче и удобнее, её использование зависит от настройки сервера (short_open_tag). По этой причине в профессиональной разработке рекомендуется всегда использовать полные теги <?php ... ?>.
Чтобы начать работать с PHP, вам понадобится:
- Локальный сервер — например, XAMPP, MAMP, WAMP или встроенный сервер PHP.
- Текстовый редактор — VS Code, PHPStorm, Sublime Text и другие.
- Файл с расширением
.php— например,test.php.
Если у вас установлен PHP, вы можете запустить встроенный сервер прямо из папки с проектом:
php -S localhost:8000
После этого откройте в браузере http://localhost:8000/test.php — и вы увидите результат.
Совет для новичков: не пытайтесь запускать PHP-файлы двойным кликом в проводнике. Браузер не умеет выполнять PHP — он просто покажет вам исходный код. PHP работает только через сервер.
Таким образом, если вы заметили - вывод значений использует команду echo.
А ввод?
В PHP обработка пользовательского ввода сильно отличается от Java и Python, так как PHP изначально создавался для веба. Рассмотрим разные контексты использования.
Если используется командная строка, то стандартный вывод доступен через fopen():
<?php
// Простой аналог input()
echo "Введите имя: ";
$name = trim(fgets(STDIN)); // как input()
echo "Введите возраст: ";
$age = (int)trim(fgets(STDIN)); // как int(input())
echo "Введите рост: ";
$height = (float)trim(fgets(STDIN)); // как float(input())
echo "Привет, $name! Тебе $age лет. Твой рост: $height м.\n";
?>
Веб-часть использует HTTP-запросы как основные суперглобальные массивы:
- GET параметры (из URL):
<?php
// URL: example.com/?name=John&age=25
$name = $_GET['name'] ?? ''; // 'John'
$age = (int)($_GET['age'] ?? 0); // 25
// Безопасное получение
$name = filter_input(INPUT_GET, 'name', FILTER_SANITIZE_STRING);
$age = filter_input(INPUT_GET, 'age', FILTER_VALIDATE_INT);
?>
- POST параметры (из формы):
<?php
// HTML форма с method="POST"
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$name = $_POST['name'] ?? '';
$email = $_POST['email'] ?? '';
// Валидация
$name = htmlspecialchars($name, ENT_QUOTES, 'UTF-8');
$email = filter_var($email, FILTER_VALIDATE_EMAIL);
if ($email) {
echo "Привет, $name! Твой email: $email";
} else {
echo "Неверный email";
}
}
?>
Пример - можно создать страницу inputtest.php на своём сервере и добавить туда такой пример обработки ввода:
<?php
// index.php
$errors = [];
$data = [];
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Получаем и очищаем данные
$data['name'] = trim($_POST['name'] ?? '');
$data['age'] = $_POST['age'] ?? '';
$data['email'] = trim($_POST['email'] ?? '');
$data['message'] = trim($_POST['message'] ?? '');
// Валидация
if (empty($data['name'])) {
$errors['name'] = 'Имя обязательно';
} elseif (strlen($data['name']) < 2) {
$errors['name'] = 'Имя должно содержать минимум 2 символа';
}
if (!filter_var($data['email'], FILTER_VALIDATE_EMAIL)) {
$errors['email'] = 'Введите корректный email';
}
if (!is_numeric($data['age']) || $data['age'] < 0 || $data['age'] > 120) {
$errors['age'] = 'Введите корректный возраст (0-120)';
}
if (empty($errors)) {
// Обработка данных
$message = "Привет, {$data['name']}! Тебе {$data['age']} лет.";
// Сохраняем в БД, отправляем email и т.д.
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Форма ввода</title>
</head>
<body>
<?php if (!empty($message)): ?>
<div style="color: green;"><?= htmlspecialchars($message) ?></div>
<?php endif; ?>
<form method="POST">
<div>
<label>Имя:</label>
<input type="text" name="name" value="<?= htmlspecialchars($data['name'] ?? '') ?>">
<?php if (isset($errors['name'])): ?>
<span style="color: red;"><?= $errors['name'] ?></span>
<?php endif; ?>
</div>
<div>
<label>Возраст:</label>
<input type="number" name="age" value="<?= htmlspecialchars($data['age'] ?? '') ?>">
<?php if (isset($errors['age'])): ?>
<span style="color: red;"><?= $errors['age'] ?></span>
<?php endif; ?>
</div>
<div>
<label>Email:</label>
<input type="email" name="email" value="<?= htmlspecialchars($data['email'] ?? '') ?>">
<?php if (isset($errors['email'])): ?>
<span style="color: red;"><?= $errors['email'] ?></span>
<?php endif; ?>
</div>
<div>
<label>Сообщение:</label>
<textarea name="message"><?= htmlspecialchars($data['message'] ?? '') ?></textarea>
</div>
<button type="submit">Отправить</button>
</form>
</body>
</html>
Возможности PHP
Функциональность языка охватывает широкий спектр задач веб-разработки. PHP умеет выполнять действия, доступные любым CGI-программам.
Основные возможности включают:
- Обработка данных форм. Скрипт принимает информацию, введенную пользователем на веб-странице.
- Генерация динамических страниц. Содержимое страницы формируется в момент запроса.
- Отсылка и прием cookies. Скрипт управляет файлами, хранящими данные о пользователе на его устройстве.
- Автоматическое извлечение POST- и GET-параметров. Данные запроса попадают в предопределённые массивы.
- Доступ к переменным окружения веб-сервера.
- Взаимодействие с системами управления базами данных. Поддержка осуществляется через дополнительные модули. Список поддерживаемых СУБД включает MySQL, PostgreSQL, SQLite, Oracle Database, Microsoft SQL Server, IBM DB2 и другие.
- Автоматизированная отправка HTTP-заголовков.
- Работа с HTTP-авторизацией.
- Управление сессиями. Скрипт сохраняет состояние пользователя между запросами.
- Работа с локальными и удалёнными файлами.
- Работа с сетевыми сокетами.
- Обработка файлов, загружаемых на сервер.
- Создание и работа с API.
- Генерация графики и PDF-документов через расширения.
- Работа с XML и JSON.
Язык предоставляет средства для работы с текстом, математических вычислений и взаимодействия с операционной системой. Расширяемость достигается за счет подключения модулей.
Вы можете генерировать HTML-страницы «на лету», подставляя туда данные из базы, времени суток, региона пользователя и так далее.
<?php
$hour = date('G');
if ($hour < 6) {
$greeting = "Доброй ночи!";
} elseif ($hour < 12) {
$greeting = "Доброе утро!";
} elseif ($hour < 18) {
$greeting = "Добрый день!";
} else {
$greeting = "Добрый вечер!";
}
?>
<h1><?php echo $greeting; ?></h1>
PHP автоматически получает данные из HTML-форм и помещает их в массивы $_GET и $_POST. Это позволяет легко обрабатывать регистрацию, авторизацию, заказы и обратную связь.
<form method="post">
<input type="text" name="username" placeholder="Ваше имя">
<button type="submit">Отправить</button>
</form>
<?php
if ($_POST['username']) {
echo "Привет, " . htmlspecialchars($_POST['username']) . "!";
}
?>
⚠️ Предупреждение
Никогда не выводите пользовательский ввод напрямую! Всегда используйтеhtmlspecialchars()или аналоги, чтобы избежать XSS-атак.
PHP отлично взаимодействует с MySQL, PostgreSQL, SQLite и другими СУБД. Вы можете сохранять, изменять и извлекать любые данные: пользователей, товары, комментарии, логи.
<?php
$pdo = new PDO('mysql:host=localhost;dbname=shop', 'user', 'password');
$stmt = $pdo->query("SELECT * FROM products");
while ($row = $stmt->fetch()) {
echo "<div>{$row['name']} — {$row['price']} руб.</div>";
}
?>
Современные веб-приложения часто состоят из фронтенда (JavaScript) и бэкенда (PHP). PHP может отдавать данные в формате JSON — и таким образом работать как API для мобильных приложений или SPA.
<?php
header('Content-Type: application/json');
echo json_encode(['status' => 'ok', 'data' => ['id' => 123]]);
?>
PHP можно запускать не только через браузер, но и из командной строки. Это позволяет писать скрипты для:
- ежедневной очистки логов,
- отправки email-рассылок,
- обработки CSV-файлов,
- резервного копирования.
php cleanup.php
PHP — это бэкенд (серверная) или фронтенд (клиентская) разработка?
PHP относится к инструментам бэкенд-разработки. Скрипты выполняются на сервере. Результатом выполнения служит HTML-разметка. Эта разметка отправляется клиенту (браузеру).
Клиент получает результаты запуска скрипта. Базовый код остается на сервере. Пользователь не видит исходный код PHP. Браузер отображает только итоговый HTML, CSS и JavaScript.
JavaScript обрабатывается на клиентской стороне. PHP-скрипты выполняются на сервере. Это фундаментальное различие определяет архитектуру приложения. Веб-сервер настраивается таким образом, чтобы файлы с расширением .php обрабатывались процессором PHP. Клиент получает готовый контент.
Существует возможность настройки веб-сервера на обработку обычных HTML-файлов процессором PHP. В этом случае клиенты не смогут узнать, получают ли они статический HTML-файл или результат выполнения скрипта. Расширение файла перестает быть индикатором технологии генерации для конечного пользователя.
Архитектура веб-приложений с PHP
Веб-приложение на PHP строится по модели клиент-сервер. Процесс взаимодействия состоит из нескольких этапов.
- Клиент отправляет HTTP-запрос на сервер. Запрос содержит адрес страницы и параметры.
- Веб-сервер принимает запрос. Сервер определяет необходимость обработки файла через PHP.
- Интерпретатор PHP выполняет код скрипта. Скрипт может обращаться к базе данных, файловой системе или внешним сервисам.
- PHP генерирует HTML-код. Результат выполнения передается веб-серверу.
- Веб-сервер отправляет HTTP-ответ клиенту. Ответ содержит сгенерированную HTML-разметку.
- Браузер клиента отображает страницу.
Такая архитектура позволяет скрывать логику работы приложения от пользователя. Серверная часть управляет данными и бизнес-логикой. Клиентская часть отвечает за отображение и взаимодействие с пользователем.
Разделение ответственности повышает безопасность приложения. Критические данные хранятся на сервере. Клиент получает только необходимую для отображения информацию.
Подключение и связи между файлами
Когда браузер запрашивает страницу (например, index.php), сервер загружает этот файл, выполняет содержащийся в нём код и отправляет результат клиенту. Но один файл редко содержит всю логику приложения. Поэтому PHP предоставляет механизмы подключения других файлов, чтобы разбить код на части: авторизация, шаблоны, бизнес-логика, конфигурации и так далее.
Хорошая практика — разделять код по папкам:
pages/— шаблоны отдельных страниц.auth.php— логика авторизации.index.php— единая точка входа (front controller).
Это позволяет:
- легко находить нужные части приложения,
- изолировать логику,
- избегать дублирования кода.
В PHP существует четыре основных конструкции для подключения внешних файлов:
includerequireinclude_oncerequire_once
Главное отличие — в поведении при ошибке:
include— если файл не найден, генерирует предупреждение (warning), но скрипт продолжает работать.require— если файл не найден, генерирует фатальную ошибку (fatal error) и останавливает выполнение.
Правило: используйте
require, когда файл критически важен для работы (например, конфигурация, класс авторизации). Используйтеinclude, если файл необязательный (например, блок рекламы или дополнительный виджет).
Суффикс _once гарантирует, что файл будет подключён только один раз за всё время выполнения скрипта, даже если вы вызовете require_once несколько раз.
Это особенно важно при работе с:
- определениями классов,
- функциями,
- константами.
Если подключить файл с определением класса дважды без _once, PHP выдаст ошибку: «Cannot redeclare class».
Пример:
require_once 'auth.php'; // подключится один раз
require_once 'auth.php'; // вторая попытка — игнорируется
Когда вы пишете:
require_once 'auth.php';
PHP буквально вставляет содержимое файла auth.php в текущее место выполнения, как будто весь его код написан прямо здесь. Это значит:
- Все переменные, функции, классы, определённые в
auth.php, становятся доступны в текущем файле. - Если в
auth.phpесть исполняемый код (не только определения), он выполняется сразу при подключении.
Важно: порядок подключения имеет значение. Если файл A использует функцию из файла B, то файл B должен быть подключён до использования этой функции.
Например, можно увидеть конструкцию вроде:
$auth->isLoggedIn()
Это означает, что в файле auth.php где-то создаётся объект и присваивается переменной $auth. Например:
// auth.php
class Auth {
public function isLoggedIn() { /* ... */ }
public function isAdmin() { /* ... */ }
public function logout() { /* ... */ }
}
// Создание глобального объекта
$auth = new Auth();
Такой подход называется глобальным состоянием. Он прост, но не масштабируем. В профессиональных проектах чаще используют автозагрузку классов и инъекцию зависимостей, но для учебного или небольшого проекта — допустимо.
Как это работает: после
require_once 'auth.php'переменная$authстановится доступна во всём основном файле (index.php), потому что она объявлена в глобальной области видимости.
В PHP нет встроенного маршрутизатора (как в современных фреймворках). Поэтому разработчики часто реализуют ручную маршрутизацию через параметры URL.
URL может выглядеть так:
https://example.com/index.php?page=tickets
Здесь page=tickets — это GET-параметр, который передаётся в массив $_GET. Так извлекаются значения.
$page = isset($_GET['page']) ? $_GET['page'] : 'home';
Эта строка:
- Проверяет, существует ли ключ
'page'в массиве$_GET. - Если да — берёт его значение.
- Если нет — использует значение по умолчанию
'home'.
Это стандартный паттерн защиты от ошибок: без проверки $_GET['page'] мог бы вызвать Undefined index при отсутствии параметра.
Альтернатива в PHP 7+:
$page = $_GET['page'] ?? 'home';
Оператор ?? (null coalescing) делает то же самое короче.
Что такое сервер, как он устроен, и зачем он PHP
Веб-сервер представляет собой программное обеспечение, работающее на удаленном компьютере. Компьютер обладает постоянным подключением к интернету. Сервер хранит файлы веб-сайта.
Программная часть сервера принимает запросы от браузеров.
Примеры веб-серверов: Apache, Nginx, IIS, Lighttpd.
Сервер настраивается для работы с двоичным PHP-файлом через FastCGI-интерфейс. PHP работает либо как модуль веб-сервера, либо как CGI-процессор.
PHP требуется сервер для выполнения кода. Браузер не умеет исполнять PHP-скрипты, поэтому именно сервер предоставляет среду выполнения. Среда же включает интерпретатор PHP и необходимые библиотеки.
Сервер также управляет ресурсами. Он распределяет память и процессорное время между скриптами, обеспечивает безопасность соединений. Он обрабатывает одновременные запросы от множества пользователей.
Физически сервер может представлять собой мощный компьютер в дата-центре. Виртуально сервер может быть контейнером или облачным экземпляром. PHP работает на большей части операционных систем. Поддерживаются Linux, модификации Unix (HP-UX, Solaris, OpenBSD), Microsoft Windows, macOS.
А если вы разрабатываете на своём устройстве, дома, то в качестве физического сервера будет выступать ваш компьютер.
Интерпретируемый и скриптовый язык
PHP относится к интерпретируемым языкам. Код выполняется пошагово во время запроса. Интерпретатор читает исходный код и сразу выполняет инструкции.
Процесс выполнения включает несколько стадий:
- Исходный код преобразуется в токены;
- Токены формируются в абстрактное синтаксическое дерево;
- Дерево компилируется в опкод (операционный код);
- Виртуальная машина Zend выполняет опкод.
Отсутствие этапа явной компиляции упрощает разработку. Изменения в коде вступают в силу сразу после сохранения файла. Разработчику не нужно запускать отдельный процесс сборки для применения правок.
PHP является скриптовым языком. Скрипт выполняется внутри host-окружения. В веб-разработке окружением служит веб-сервер.
Скриптовый характер определяет способ запуска. Пользователь не создает отдельный исполняемый файл для распространения. Код размещается на сервере, и сервер запускает скрипт при обращении к соответствующему URL.
Скрипты обеспечивают гибкость, ведь логика работы меняется путем редактирования текстовых файлов, а доступ к серверу позволяет обновлять функциональность без вмешательства в работу клиентов.
PHP-скрипты запускаются без сервера или браузера в командной строке. Потребуется только парсер — синтаксический анализатор PHP. Такой способ работы идеально подходит для скриптов, которые требуется выполнять регулярно. Примеры планировщиков: cron на платформах *nix или Linux, «Планировщик задач» на платформах Windows. Этими скриптами также просто обрабатывают тексты.
Современный движок Zend Engine (начиная с PHP 7) преобразует исходный код в промежуточное представление — OPcode (операционный код), аналогичное байт-коду в Java или Python. Этот OPcode затем выполняется виртуальной машиной Zend VM.
OPcache (включён по умолчанию с PHP 5.5) — кэширует скомпилированный OPcode в разделяемой памяти, устраняя повторную токенизацию и компиляцию при каждом запросе. Это превращает PHP в частично компилируемый язык: время запуска становится сопоставимым с JIT-компиляцией (особенно после PHP 8.0, где Zend Engine получил улучшенный оптимизатор), а сам код остаётся гибким и интерпретируемым на этапе разработки.
OPcache не меняет семантику языка. Даже при кэшировании OPcode переменные остаются динамическими, типы — нефиксированными (если не включена строгая типизация), а поведение include — динамическим. OPcache — это ускорение инициализации.
Можно ли писать десктопные и мобильные приложения, или он только для веб-разработки?
Главное назначение PHP — создавать скрипты, которые обрабатываются на стороне сервера. Это традиционная и главная цель языка.
Поэтому веб-разработка остается основной областью применения.
Существуют возможности для создания десктопных приложений. Фреймворк PHP-GTK позволяет писать программы с графическим интерфейсом пользователя.
При использовании фреймворка Qt Designer создается приложение с графическим интерфейсом. Такие решения встречаются реже веб-приложений.
Мобильные приложения на PHP пишутся опосредованно. PHP служит бэкендом для мобильного приложения. Мобильное приложение отправляет запросы на сервер. Сервер на PHP обрабатывает данные и возвращает ответ в формате JSON.
А вот с консольными приложениями проблем нет. Терминал поддерживает язык нативно, и это удобно для автоматизации задач, обработки данных и обслуживания системы.
Разработка полноценных нативных мобильных интерфейсов на PHP не распространена. Для интерфейсов используются Swift, Kotlin или кроссплатформенные решения. PHP обеспечивает серверную логику для этих интерфейсов.
Почему всегда когда говорят про PHP, всегда упоминают MySQL?
Исторически сложилась тесная связь между PHP и MySQL, обе технологии развивались в одно время и стали стандартом для хостинга веб-сайтов.
Интеграция между языком и базой данных реализована на высоком уровне. PHP содержит встроенные средства для работы с MySQL, а подключение к базе данных требует минимального количества кода.
Хостинг-провайдеры предлагали связку PHP и MySQL по умолчанию. Тарифы включали поддержку этих технологий. Это сделало связку доступной для новичков и малого бизнеса. Кроме этого, документация и обучающие материалы часто рассматривают эти технологии вместе. Сообщество накопило огромный опыт совместного использования.
Но всё же, PHP поддерживает взаимодействие с большим количеством различных систем управления базами данных через дополнительные модули. Список включает PostgreSQL, SQLite, Oracle и другие. MySQL остается наиболее частым выбором из-за простоты и распространенности.
Динамическая типизация
Типизация в PHP группируется на три категории:
- scalar:
string,int,float,bool; - compound:
array,object,callable,iterable; - special:
null,resource.
$name = "Alice"; // string
$age = 30; // int
$price = 19.99; // float
$isActive = true; // bool
$tags = ["php", "web"]; // array
PHP — язык с динамической, слабой типизацией по умолчанию. Это означает, что:
- Тип переменной не объявляется и определяется во время выполнения на основе значения;
- Автоматические преобразования между типами происходят неявно в большинстве операций;
- Одна и та же переменная может менять тип в ходе выполнения скрипта.
Эта модель обеспечивает высокую скорость прототипирования: разработчик может сосредоточиться на логике, не тратя время на декларацию типов и управление памятью. Однако она влечёт за собой две системные проблемы:
Во-первых, неопределённость поведения. Например:
echo "10 apples" + 2; // → 12 (строка преобразуется к числу по правилам "leading numeric string")
echo "apples 10" + 2; // → 2 (строка без ведущего числа → 0)
Предсказуемость требует глубокого знания правил преобразования (см. спецификацию convert_to_number() в Zend Engine).
Во-вторых, сложность статического анализа. Без явных типов IDE и анализаторы кода не могут гарантировать корректность вызовов. Для решения этой проблемы в PHP 7.0 была введена строгая типизация через директиву declare(strict_types=1), которая:
- Применяется на уровне файла;
- Требует точного совпадения типов аргументов и возвращаемых значений (исключения —
null, если указан?T); - Не отменяет динамическую природу языка, а лишь ограничивает её в определённых контекстах.
Строгая типизация — инструмент локального ужесточения в критически важных участках кода (например, в слое домена или API-контрактах). Это компромисс, характерный для PHP: сохранение гибкости в целом при предоставлении механизмов контроля там, где он необходим.
Модель однократного исполнения
В отличие от долгоживущих серверных приложений (Node.js, Java), PHP по умолчанию работает в модели однократного исполнения.
Каждый HTTP-запрос порождает отдельный процесс (или поток в SAPI-режиме), в котором:
- Инициализируется интерпретатор (загружаются расширения, OPcache, инициализируются суперглобальные массивы);
- Выполняется код PHP-файла (или цепочки файлов через
include); - Генерируется HTTP-ответ (заголовки, тело документа);
- Процесс завершается, освобождая всю память.
Эта модель упрощает управление состоянием (не нужно заботиться о памяти между запросами), но накладывает ограничения на долгие операции и кэширование в памяти.
С появлением SAPI-интерфейсов вроде php-fpm и RoadRunner/Swoole, PHP приобрёл возможность работать и в долгоживущих режимах (worker-based), что расширило его применение в микросервисах и высоконагруженных API, однако классическая модель остаётся доминирующей и определяет философию ядра.