Help us improve
Share bugs, ideas, or general feedback.
From php-modernization
Modernizes PHP code to 8.1-8.5 features including enums, readonly, property hooks; enforces PSR/PER-CS compliance; applies PHPStan, Rector, PHP-CS-Fixer for type safety and DTOs.
npx claudepluginhub netresearch/claude-code-marketplace --plugin php-modernizationHow this skill is triggered — by the user, by Claude, or both
Slash command
/php-modernization:php-modernizationThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Modernize PHP to 8.1-8.5, PSR/PER-CS, PHPStan max, type safety.
checkpoints.yamlreferences/adapter-registry-pattern.mdreferences/api-platform-edges.mdreferences/core-rules.mdreferences/doctrine-modernization-edges.mdreferences/immutability-boundaries.mdreferences/migration-strategies.mdreferences/multi-agent-pitfalls.mdreferences/multi-version-adapters.mdreferences/mutation-testing.mdreferences/php-8.4.mdreferences/php-8.5.mdreferences/php-cs-fixer-deprecations.mdreferences/php8-features.mdreferences/phpstan-compliance.mdreferences/phpunit-modernization.mdreferences/psr-per-compliance.mdreferences/psr15-middleware-architecture.mdreferences/request-dtos.mdreferences/static-analysis-tools.mdModernizes PHP code to PHP 8.x with strict types, enums, DTOs, readonly properties, property hooks; configures PHPStan (level 9+), Rector, PHP-CS-Fixer for type safety and PSR compliance.
Builds modern PHP 8.3+ applications with Laravel or Symfony, enforcing strict typing, PHPStan level 9, Swoole async patterns, and PSR standards. Creates controllers, middleware, migrations, PHPUnit/Pest tests, DTOs, DI, and REST/GraphQL APIs.
Share bugs, ideas, or general feedback.
Modernize PHP to 8.1-8.5, PSR/PER-CS, PHPStan max, type safety.
uv run ${CLAUDE_SKILL_DIR}/scripts/introspect.py (cheap), or verify_php_project.py --summary (full, with agent_actions[]).... --check PM-XX per finding. Full output when triaging >3.uv run ${CLAUDE_SKILL_DIR}/scripts/modernize_loop.py --mode dry-run. Review transcript before applying.| Need | Read |
|---|---|
| PHP 8.0-8.3 baseline | 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 config | references/phpstan-compliance.md |
| Static analysis | references/static-analysis-tools.md |
| PHP-CS-Fixer deprecations | references/php-cs-fixer-deprecations.md |
| DTOs / VOs / inputs | references/type-safety.md, references/request-dtos.md |
| Adapter / registry | references/adapter-registry-pattern.md |
| Multi-version compat | references/multi-version-adapters.md |
| Symfony patterns | references/symfony-patterns.md |
| PSR-15 middleware | references/psr15-middleware-architecture.md |
| Doctrine edges | references/doctrine-modernization-edges.md |
| API Platform | references/api-platform-edges.md |
| Immutability | references/immutability-boundaries.md |
| Mutation testing | references/mutation-testing.md |
| Migration planning | references/migration-strategies.md |
| PHPUnit 12→13, mock vs stub | references/phpunit-modernization.md |
| Multi-agent dispatch hazards | references/multi-agent-pitfalls.md |
readonly to Doctrine entities or mapped-superclasses (embeddables: see references/doctrine-modernization-edges.md).--dry-run. Invoke vendor/bin/rector directly — composer script aliases can drop ---forwarded flags depending on configuration.final to mock targets or extension points without confirmation.@generated files or files under var/cache/, vendor/, node_modules/, .Build/.git checkout -- files outside your scope in shared trees — use git stash / git diff.rm -rf /tmp/phpstan-* var/cache/phpstan first.createMock → createStub — promote to expects(...)->method(...)->with(...).declare(strict_types=1) everywhere@PER-CS, no deprecated aliasestreatPhpDocTypesAsCertain: false); 10 for new#[Override] (8.3+), #[SensitiveParameter] (8.2+), typed constants (8.3+)array_find/any/all (8.4); pipe |> (8.5)createStub, mocks createMock + expects (no self::any() in 13)withComposerBased(symfony: true) (per-version SymfonySetList::SYMFONY_* are @deprecated)