Forge
markdowne8ad0934
1# PHP — инструменты, качество, CI (фундаментальный проход)
2
3**Назначение:** слой **PHPUnit/Pest, статанализ, форматирование, Rector, Xdebug, CI-матрица**. Мир **`software.php`**.
4
5---
6
7### 1. Composer как центр задач
8
9- **Fact:** `composer.json` → секция `scripts` (`test`, `phpstan`, `cs-fix`); `composer exec` для бинарей из `vendor/bin`.
10- **Heuristic:** один вход «проверить всё» в CI: `composer test` агрегирует подзадачи; документировать в README.
11
12---
13
14### 2. PHPUnit: структура
15
16- **Fact:** тесты — классы с `TestCase`, методы `test*` или `@test`; фикстуры `setUp`/`tearDown`; data providers.
17- **Heuristic:** изоляция тестов — без зависимости от порядка; моки для внешних HTTP/БД или testcontainers на уровне проекта.
18
19---
20
21### 3. Pest (опционально)
22
23- **Fact:** Pest — слой над PHPUnit с функциональным стилем `test()`, `expect()`.
24- **Heuristic:** выбрать один стиль на репозиторий или явно разделить подпроекты — не смешивать хаотично.
25
26---
27
28### 4. PHPStan / Larastan
29
30- **Fact:** **PHPStan** — уровни 0–9 (строгость растёт); **Larastan** — расширения для Laravel.
31- **Heuristic:** новый проект — целевой уровень (например 6–8) с baseline постепенного снижения долга; не «включить max» без плана.
32
33---
34
35### 5. Psalm
36
37- **Fact:** альтернатива/дополнение PHPStan; свои плагины и тот же класс задач.
38- **Heuristic:** не держать оба без причины — один основной статанализатор в CI.
39
40---
41
42### 6. Code style: PHPCS / PHP-CS-Fixer
43
44- **Fact:** PHPCS проверяет стиль; PHP-CS-Fixer автофиксит; PSR-12 распространённый baseline.
45- **Heuristic:** фиксер в pre-commit или CI с `--dry-run` для проверки; единый конфиг в репо.
46
47---
48
49### 7. Rector и миграции версий PHP
50
51- **Fact:** **Rector** применяет AST-трансформации для апгрейда синтаксиса/типов между версиями PHP и фреймворков.
52- **Heuristic:** прогон на ветке + полный test suite; коммиты небольшими наборами правил (sets), не «всё сразу».
53
54---
55
56### 8. Xdebug: режимы
57
58- **Fact:** `xdebug.mode=debug,develop,coverage,trace` и т.д.; влияет на производительность.
59- **Heuristic:** в проде Xdebug обычно выключен; coverage в CI — отдельный job или PCOV как альтернатива.
60
61---
62
63### 9. Матрица версий в CI
64
65- **Fact:** тестировать минимальную поддерживаемую PHP и одну «latest»; для библиотек — широкая матрица.
66- **Heuristic:** совпадение с `require.php` в composer; не тестировать версии ниже заявленной поддержки.
67
68---
69
70### 10. Линтинг депрекations
71
72- **Fact:** `E_DEPRECATED` в логах CI при `error_reporting=E_ALL`.
73- **Heuristic:** ломать билд на новых deprecations в основной ветке при политике «чистый forward».
74
75---
76
77## Registry card (template-knowledge-card-v1)
78
79### Provenance
80- source_refs: документация PHPUnit, PHPStan, Rector, xdebug.org; KB 2026-03-01.
81- created_at: 2026-03-01
82- updated_at: 2026-03-01
83
84### Metadata
85- card_id: KC-2026-03-01-PHP-TOOL-L1
86- world: software.php
87- layer: world
88- tags: php; phpunit; phpstan; rector; xdebug; ci
89- status: active
90
91### Epistemic Linkage
92- epistemic_basis: fact + inference
93- confidence: high
94- falsification_trigger: смена major версий инструментов — перепроверить команды
95
96### Core Unit
97- context: настройка качества в PHP-проекте, апгрейд версии языка
98- signal: «что запускать в CI», «как автоматизировать миграцию синтаксиса»
99- action: матрица инструментов §1–10
100- lesson: статанализ и тесты — контракт команды, не опция
101
102### Operationalization
103- first_adoption_task: composer scripts + один job CI
104- validation_check: green build на min/max PHP
105- success_criterion: новый код не понижает уровень строгости без ADR
106
107### Lifecycle
108- supersedes: —
109- superseded_by: —
110- deprecation_reason: —
111
View only · write via MCP/CIDE