From fuse-php
Use when writing or reviewing modern PHP (8.1–8.5) outside a framework — property hooks, asymmetric visibility, the pipe operator, native attributes, enums, readonly, lazy objects. Covers language features that LLMs frequently get wrong or write in a pre-8.0 style. Do NOT use for coding style/PSR/autoloading (use php-standards) or Laravel-specific syntax (use the laravel plugin).
How this skill is triggered — by the user, by Claude, or both
Slash command
/fuse-php:php-language-modernThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Before writing PHP, use `TeamCreate` to spawn 3 agents:
Before writing PHP, use TeamCreate to spawn 3 agents:
composer.json require.php, CI matrix)After writing, run fuse-ai-pilot:sniper for validation.
| Feature | Since | Use it for |
|---|---|---|
| Enums (backed + methods/interfaces) | 8.1 | Closed sets of values with behavior |
First-class callable syntax f(...) | 8.1 | Passing callables without strings |
| readonly properties / classes | 8.1 / 8.2 | Immutable value objects / DTOs |
#[\Override] | 8.3 | Fail-fast on broken inheritance |
Property hooks get/set | 8.4 | Computed/validated properties, no getter/setter boilerplate |
Asymmetric visibility public private(set) | 8.4 (static: 8.5) | Public read, restricted write |
Lazy objects newLazyGhost() | 8.4 | Deferred initialization in DI containers |
Pipe operator |> | 8.5 | Left-to-right data transformation chains |
clone() function + $withProperties | 8.5 | Immutable "with" updates, incl. readonly |
#[\NoDiscard] | 8.5 | Enforce return-value consumption |
#[Attribute] replaces @annotation docblocks for routing, ORM, DI, validation. This is the #1 LLM mistake — see attributes-over-docblocks.md.composer.json require.php before choosing a feature.readonly + property hooks over hand-written getters/setters — less boilerplate, enforced immutability.declare(strict_types=1); at the top of every file.src/
├── Enum/
│ └── Status.php # backed enum + interface + methods
├── ValueObject/
│ └── Money.php # readonly class, clone() with $withProperties
└── Model/
└── User.php # property hooks, asymmetric visibility
→ See modern-class.md for complete working code
| Topic | Reference | When to Consult |
|---|---|---|
| PHP 8.5 features | php-85-features.md | Pipe operator, clone(), #[\NoDiscard], static aviz |
| PHP 8.4 features | php-84-features.md | Property hooks, aviz, lazy objects, #[\Deprecated] |
| 8.1–8.3 baseline | php-81-83-baseline.md | Enums, readonly, fibers, #[\Override] |
| Attributes vs docblocks | attributes-over-docblocks.md | Any metadata: routing, ORM, DI, validation |
| Template | When to Use |
|---|---|
| modern-class.md | Writing a new class the modern way |
require.php before picking a feature version__get@Route/@ORM\Column docblock annotations — use attributesreadonly fitnpx claudepluginhub fusengine/agents --plugin fuse-phpWrite modern PHP 8.x code with typed properties, enums, readonly classes, match expressions, named arguments, union types, fibers, attributes, and constructor promotion. For WooCommerce or PHP 8.x projects.
Guides use of modern PHP features like typed properties, union types, match expressions, named arguments, attributes, enums, and readonly properties for type-safe, expressive code in PHP 7.4+.
Modern PHP idioms for any PHP project (PHP 8.1+): readonly properties, enums, match expressions, constructor property promotion, typed properties, named arguments, nullsafe operator, first-class callable syntax, strict_types, PSR-12 style, and null discipline. Apply when the project is a PHP 8.1+ project. Stack-agnostic — referenced by every PHP plugin in the marketplace. Use this skill to: - Write strongly-typed, immutable-by-default value objects with readonly properties and enums. - Replace switch ladders and magic constants with match expressions and backed enums. - Cut constructor boilerplate with property promotion and express optionality with typed nullable returns. - Keep code PSR-12 compliant with declare(strict_types=1) in every file. Do NOT use this skill for: - Framework-specific idioms (Eloquent, Doctrine, Symfony services, Laravel facades — those live in framework plugin skills). - Composer / autoloading / dependency management — see php-foundation:composer-tooling. - Testing patterns — see php-foundation:php-testing.