关于 php-modernization
面向 Agent 的 PHP 现代化技能,指导项目检查、逐项问题分析和试运行现代化流程,并提供按版本索引的参考资料及迁移、分析和测试约束。
主要功能
- 01项目检查脚本
- 02逐项问题检查
- 03试运行现代化流程
- 04PHP 版本参考索引
- 05迁移与测试约束
适用场景
- 01评估 PHP 项目的现代化工作
- 02检查单项现代化问题
- 03规划安全的 PHP 与测试套件升级
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ dirnbauer/ webconsulting-skills --skill php-modernization安装后在 Claude Code 中输入/php-modernization确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
checkpoints.yamlreferences/adapter-registry-pattern.mdapi-platform-edges.mdcontracts-and-invariants.mdcore-rules.mddoctrine-modernization-edges.mdimmutability-boundaries.mdmigration-strategies.mdmulti-agent-pitfalls.mdmulti-version-adapters.mdmutation-testing.mdphp-8.4.mdphp-8.5.mdphp-cs-fixer-deprecations.mdphp8-features.mdphpstan-compliance.mdphpunit-modernization.mdpsr-per-compliance.mdpsr15-middleware-architecture.mdrequest-dtos.mdstatic-analysis-tools.mdsymfony-patterns.mdtype-safety.mdscripts/_common.pyintrospect.pymodernize_loop.pyverify_php_project.pyverify-php-project.shtemplates/composer-scripts.jsontemplates/github-actions/php-modernization.yml详细介绍
PHP 现代化
Agent 契约
- 发现:运行
uv run ${CLAUDE_SKILL_DIR}/scripts/introspect.py(开销低),或运行verify_php_project.py --summary(完整检查,包含agent_actions[])。 - 深入检查:针对每项发现运行
... --check PM-XX。对超过 3 项的问题进行分类时,使用完整输出。 - 应用:运行
uv run ${CLAUDE_SKILL_DIR}/scripts/modernize_loop.py --mode dry-run。应用更改前先审阅执行记录。 - 参考资料:按需加载;不要预先加载。
参考资料索引
| 需求 | 阅读 |
|---|---|
| PHP 8.0-8.3 基线 | references/php8-features.md |
| PHP 8.4 | references/php-8.4.md |
| PHP 8.5 | references/php-8.5.md |
| PSR / PER-CS | references/psr-per-compliance.md |
| PHPStan 配置 | references/phpstan-compliance.md |
| 静态分析 | references/static-analysis-tools.md |
| PHP-CS-Fixer 弃用项 | references/php-cs-fixer-deprecations.md |
| DTO / VO / 输入 | references/type-safety.md、references/request-dtos.md |
| 适配器 / 注册表 | references/adapter-registry-pattern.md |
| 多版本兼容 | references/multi-version-adapters.md |
| Symfony 模式 | references/symfony-patterns.md |
| PSR-15 中间件 | references/psr15-middleware-architecture.md |
| Doctrine 边界情况 | references/doctrine-modernization-edges.md |
| API Platform | references/api-platform-edges.md |
| 不可变性 | references/immutability-boundaries.md |
| 契约与不变量 | references/contracts-and-invariants.md |
| 变异测试 | references/mutation-testing.md |
| 迁移规划 | references/migration-strategies.md |
| PHPUnit 12→13、mock 与 stub | references/phpunit-modernization.md |
| 多 Agent 调度隐患 | references/multi-agent-pitfalls.md |
严格限制
- 绝不要对 Doctrine 实体或映射超类应用
readonly(嵌入式对象请参阅references/doctrine-modernization-edges.md)。 - 绝不要在未使用
--dry-run的情况下运行 Rector。直接调用vendor/bin/rector——根据配置,composer 脚本别名可能会丢弃通过--转发的标志。 - 提高 PHPStan 级别前,必须重新生成并提交基线。应缩小基线,绝不要删除。
- 未经确认,绝不要对 mock 目标或扩展点一概应用
final。 - 绝不要编辑
@generated文件或var/cache/、vendor/、node_modules/、.Build/下的文件。 - 在共享工作树中,绝不要对范围外的文件运行
git checkout --——请使用git stash/git diff。 - vendor 变更后,绝不要信任 PHPStan 的旧缓存:先运行
rm -rf /tmp/phpstan-* var/cache/phpstan。 - 绝不要批量替换
createMock→createStub——应改为expects(...)->method(...)->with(...)。
迁移清单
- 所有文件都添加
declare(strict_types=1) - 使用
@PER-CS,不使用已弃用的别名 - PHPStan ≥9(
treatPhpDocTypesAsCertain: false);新项目使用 10 - 使用 PHPat 检查层边界
- 所有方法都指定返回类型和参数类型
- 优先使用 DTO,而非数组;优先使用有底层值的枚举,而非常量
- 类型提示使用 PSR 接口
- 使用
#[Override](8.3+)、#[SensitiveParameter](8.2+)、类型化常量(8.3+) - 仅对 DTO / VO / 事件使用 readonly
- 属性钩子(8.4);
array_find/any/all(8.4);管道运算符|>(8.5) - PHPUnit 12+:stub 使用
createStub,mock 使用createMock+expects(13 中不使用self::any()) - Rector 使用
withComposerBased(symfony: true)(按版本区分的SymfonySetList::SYMFONY_*已标记为@deprecated)
致谢与归属
本技能基于 Netresearch DTT GmbH 的出色工作。
原始代码库:https://github.com/netresearch/php-modernization-skill
版权所有 (c) Netresearch DTT GmbH — 方法论与最佳实践(MIT / CC-BY-SA-4.0)
特别感谢 Netresearch DTT GmbH 为 TYPO3 社区慷慨提供开源贡献,这些贡献帮助塑造了本技能集。 由 webconsulting.at 改编,纳入本技能集
评论
支持 Markdown