Forge
markdowne8ad0934
1# PHP 8.4+ — фундаментальный слой (рантайм и язык)
2
3**Назначение:** опорная карта PHP как **рантайма** для ветки **8.4+** (и соседних 8.x): версии, SAPI, OPcache, типизация, релиз 8.4, Composer, безопасность, JIT/GC/preload, FPM, расширения. Слой **L1 world** (миру `software.php`).
4
5**Полный фундаментальный проход по миру PHP:** `index-knowledge-php-cluster-v1.md` → при необходимости **`kb-php-versions-and-evolution-v1.md`** (легаси 5/7, хронология фич) → этот файл → `kb-php-language-semantics-v1.md` → `kb-php-web-sessions-io-v1.md` → `kb-php-data-persistence-v1.md` → `kb-php-tooling-quality-v1.md`. Laravel — отдельно: `kb-laravel-fundamentals-v1.md`.
6
7**Порядок загрузки (memory-architecture):** `status-php-laravel-v1.md` → `playbook-php-v1.md` → точечный kb (или кластер по карте).
8
9---
10
11### 1. Ветка PHP 8.x и позиция 8.4
12
13- **Fact:** PHP 8.4 выпущен **21.11.2024** (официальный анонс php.net/releases/8.4). Ветка 8.x — текущая линия развития языка; для новых проектов целесообразно оставаться на поддерживаемой минорной версии (8.3/8.4/8.5 по мере выхода патчей).
14- **Heuristic:** в любом обсуждении называть **точную минорную версию** (`8.4.x`) и окружение (CLI / php-fpm / встроенный сервер); не смешивать с PHP 7.x или «просто PHP» без версии.
15- **First adoption task:** зафиксировать в репозитории `composer.json` → `require.php` и при необходимости `config.platform.php`, чтобы CI и локальная среда совпадали с production.
16- **Success criterion:** нет расхождений «локально 8.3, прод 8.4» без явной политики; обновления патчей запланированы.
17- **Confidence:** high
18
19---
20
21### 2. Режимы исполнения и Opcache
22
23- **Fact:** типичные SAPI: **CLI** (скрипты, Artisan, cron), **php-fpm** / mod_php (веб), реже embed. **OPcache** кеширует байткод и сильно влияет на latency/throughput веб-приложений; в CLI по умолчанию часто отключён или ограничен.
24- **Heuristic:** диагностику «тормозит прод» разделять: веб (OPcache, fpm pool, autoload) vs CLI (память, I/O).
25- **First adoption task:** для production-веба проверить включение OPcache и политику revalidate; для деплоя — сброс/перезапуск воркеров при выкладке.
26- **Success criterion:** понятная матрица «среда → SAPI → что смотреть в первую очередь».
27- **Confidence:** high
28
29---
30
31### 3. Строгость типов и модель языка (8.x)
32
33- **Fact:** в PHP 8.x усилена типизация: `TypeError` на несовместимых типах, union/intersection types, `readonly`, `enum` (с 8.1), атрибуты; `strict_types=1` задаёт строгую семантику для скаляров в пользовательском коде.
34- **Heuristic:** новый код в критичных границах (public API, интеграции) — с явными типами и по возможности `declare(strict_types=1)` в модулях; легаси трогать точечно.
35- **First adoption task:** для публичных пакетов описать в README политику strict_types и уровень PHPStan/Psalm.
36- **Success criterion:** меньше молчаливых приведений типов на границах системы.
37- **Confidence:** high
38
39---
40
41### 4. Поверхность PHP 8.4 (язык и стандартная библиотека)
42
43- **Fact (основные темы релиза):** property hooks; asymmetric visibility; lazy objects через Reflection; `array_find`, `array_find_key`, `array_any`, `array_all`; mbstring (`mb_trim` и др.); DateTime микросекунды / `createFromTimestamp`; `#[Deprecated]`; PCRE2 и изменения regex; bcrypt default cost **10→12**; `exit`/`die` как функции; libcurl **≥7.61.0**. Источники: php.net/releases/8.4, php.watch/versions/8.4.
44- **Heuristic:** при миграции 8.3→8.4 — тесты, статанализ, deprecations; отдельно **пароли** и **regex**.
45- **First adoption task:** CI на PHP 8.4 + `composer validate`.
46- **Success criterion:** нет сюрпризов от bcrypt/PCRE/deprecations.
47- **Confidence:** high
48
49---
50
51### 5. Composer и зависимости
52
53- **Fact:** **Composer** — менеджер зависимостей; `composer.lock` для приложений; `require.php` — минимальная версия PHP; `replace`, `conflict`, `provide` влияют на разрешение.
54- **Heuristic:** `composer audit` в CI; private packages — репозитории в `repositories`, не коммитить токены.
55- **First adoption task:** `composer install --no-dev` в артефакте деплоя.
56- **Success criterion:** воспроизводимые билды.
57- **Confidence:** high
58
59---
60
61### 6. Безопасность и эксплуатация (минимум)
62
63- **Fact:** прод: без stack trace пользователю; сессии/cookie — secure flags; патчи PHP по каналу ОС/образа.
64- **Heuristic:** валидация входа до логики; OWASP Top 10 для веба — вне этого файла, но baseline здесь согласован.
65- **First adoption task:** чек-лист: `display_errors=Off`, секреты в env, отдельный пользователь для fpm.
66- **Success criterion:** нет утечек трасс; секреты не в git.
67- **Confidence:** high
68
69---
70
71### 7. JIT (OPcache JIT) — когда имеет смысл
72
73- **Fact:** JIT компилирует горячий opcode в нативный код; выигрыш **зависит от нагрузки** (CPU-bound вычисления в PHP) и может быть незначителен для типичного I/O-bound веба.
74- **Heuristic:** бенчмаркировать с реалистичным профилем; не включать «на удачу» без измерений; следить за совместимостью расширений.
75- **First adoption task:** сравнить RPS/latency до/после на стейдже для **своего** кода.
76- **Confidence:** medium
77
78---
79
80### 8. Сборка мусора и циклы ссылок
81
82- **Fact:** refcount + циклический GC; деструкторы и циклы могут откладывать очистку; большие графы объектов — пики памяти.
83- **Heuristic:** долгоживущие worker’ы (queue consumer) — периодически сбрасывать состояние или рестарт по политике; не хранить гигантские деревья в памяти без нужды.
84- **Confidence:** medium
85
86---
87
88### 9. Preloading (`opcache.preload`)
89
90- **Fact:** preloading загружает указанный PHP-скрипт при старте воркера, прогревая классы в OPcache; требует корректного **preload-скрипта** и осознанного порядка зависимостей.
91- **Heuristic:** полезно на крупных фреймворках; при обновлении кода — перезапуск fpm; ошибка в preload ломает старт воркера.
92- **Confidence:** medium
93
94---
95
96### 10. Расширения: типичный набор для веба
97
98- **Fact:** часто нужны: `openssl`, `mbstring`, `intl`, `pdo` + драйвер БД, `json`, `curl`, `zip`, `xml`/`dom` (интеграции); отсутствие ext ломает `composer install` на `ext-*` требованиях.
99- **Heuristic:** в `composer.json` явно `ext-*` в `require`; Docker-образы — официальные или с документированным списком ext.
100- **Confidence:** high
101
102---
103
104### 11. php-fpm: пулы и наблюдаемость
105
106- **Fact:** `pm` (static/dynamic/ondemand), `pm.max_children`, `request_terminate_timeout`, `slowlog` — основные рычаги стабильности; нехватка воркеров → очередь запросов; утечки → исчерпание пула.
107- **Heuristic:** мониторить `listen queue`, время ответа; slowlog для запросов > порога.
108- **Confidence:** high
109
110---
111
112### 12. Лимиты `php.ini` (память, время, загрузка)
113
114- **Fact:** `memory_limit`, `max_execution_time`, `max_input_time`, `upload_max_filesize`, `post_max_size` влияют на веб и CLI по-разному; CLI часто `max_execution_time=0`.
115- **Heuristic:** согласовать с reverse proxy (таймауты nginx) и с UX больших upload; не завышать лимиты «на всякий случай» без мониторинга.
116- **Confidence:** high
117
118---
119
120### 13. Веб-сервер vs встроенный `php -S`
121
122- **Fact:** прод — nginx/apache + fpm (или unit, frankenphp и т.д.); `php -S` только для разработки.
123- **Heuristic:** не воспроизводить security/perf поведение прода на встроенном сервере.
124- **Confidence:** high
125
126---
127
128### 14. Reflection и метапрограммирование
129
130- **Fact:** Reflection API инспектирует классы/атрибуты; **lazy objects** (8.4) завязаны на reflection; DI-контейнеры и сериализаторы используют reflection intensively.
131- **Heuristic:** кешировать результаты рефлексии на горячем пути; не строить бизнес-логику на «магии» без тестов.
132- **Confidence:** medium
133
134---
135
136## Registry card (template-knowledge-card-v1)
137
138### Provenance (происхождение)
139- source_refs: `https://www.php.net/releases/8.4/en.php`; `https://php.watch/versions/8.4`; manual opcache/preload/JIT; KB 2026-02-28, обновлено 2026-03-01 (полный проход).
140- created_at: 2026-02-28
141- updated_at: 2026-03-01
142- author: agent-notes KB maintainer
143
144### Metadata
145- card_id: KC-2026-02-28-PHP-84-L1
146- world: software.php
147- layer: world
148- tags: php; php-8.4; runtime; composer; opcache; fpm; jit
149- status: active
150
151### Epistemic Linkage
152- epistemic_basis: fact + inference
153- evidence_type: official release notes + manual
154- confidence: high
155- uncertainty: JIT/preload выигрыш — только измерениями на своём коде
156- falsification_trigger: смена supported versions на php.net
157- transfer_boundary: не переносить на PHP 7.x без проверки
158
159### Core Unit
160- context: версия, SAPI, прод-поведение, миграция 8.3→8.4
161- signal: perf, opcache, fpm, лимиты ini
162- action: §1–14 + кластер `index-knowledge-php-cluster-v1.md`
163- outcome: согласованная платформа PHP
164- lesson: рантайм = версия + SAPI + ini + расширения
165
166### Operationalization
167- first_adoption_task: зафиксировать образ PHP и список ext
168- validation_check: `php -i` в CI артефакте; health endpoint
169- success_criterion: предсказуемое поведение под нагрузкой
170- rollback_or_mitigation: откат образа; отключение preload/JIT
171
172### Lifecycle
173- supersedes: —
174- superseded_by: —
175- deprecation_reason: —
176
View only · write via MCP/CIDE