| 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 | |