agentsclimarketplace

Php language modern

Skill fusengine/agents/plugins/php-expert/skills/php-language-modern

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).From its SKILL.md

Install
npx -y skills add fusengine/agents --skill php-language-modern

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 22 stars22 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

4.5 KB, ~1.0k tokens by cl100k_base, as published. Nobody here has run it

Modern PHP Language (8.1 → 8.5)

Agent Workflow (MANDATORY)

Before writing PHP, use TeamCreate to spawn 3 agents:

  1. fuse-ai-pilot:explore-codebase - Detect the project's minimum PHP version (composer.json require.php, CI matrix)
  2. fuse-ai-pilot:research-expert - Verify a feature's version + syntax on php.net before using it
  3. mcp__context7__query-docs - Cross-check idiomatic usage

After writing, run fuse-ai-pilot:sniper for validation.


Overview

FeatureSinceUse it for
Enums (backed + methods/interfaces)8.1Closed sets of values with behavior
First-class callable syntax f(...)8.1Passing callables without strings
readonly properties / classes8.1 / 8.2Immutable value objects / DTOs
#[\Override]8.3Fail-fast on broken inheritance
Property hooks get/set8.4Computed/validated properties, no getter/setter boilerplate
Asymmetric visibility public private(set)8.4 (static: 8.5)Public read, restricted write
Lazy objects newLazyGhost()8.4Deferred initialization in DI containers
Pipe operator |>8.5Left-to-right data transformation chains
clone() function + $withProperties8.5Immutable "with" updates, incl. readonly
#[\NoDiscard]8.5Enforce return-value consumption

Critical Rules

  1. Attributes, never docblock annotations - Native #[Attribute] replaces @annotation docblocks for routing, ORM, DI, validation. This is the #1 LLM mistake — see attributes-over-docblocks.md.
  2. Check the target PHP version first - Never emit 8.5 syntax on an 8.1 project. Read composer.json require.php before choosing a feature.
  3. Prefer enums over class constants for closed value sets — they carry type safety and methods.
  4. Prefer readonly + property hooks over hand-written getters/setters — less boilerplate, enforced immutability.
  5. declare(strict_types=1); at the top of every file.

Architecture

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


Reference Guide

Concepts

TopicReferenceWhen to Consult
PHP 8.5 featuresphp-85-features.mdPipe operator, clone(), #[\NoDiscard], static aviz
PHP 8.4 featuresphp-84-features.mdProperty hooks, aviz, lazy objects, #[\Deprecated]
8.1–8.3 baselinephp-81-83-baseline.mdEnums, readonly, fibers, #[\Override]
Attributes vs docblocksattributes-over-docblocks.mdAny metadata: routing, ORM, DI, validation

Templates

TemplateWhen to Use
modern-class.mdWriting a new class the modern way

Best Practices

DO

  • Read require.php before picking a feature version
  • Use enums with interfaces + methods for stateful value sets
  • Use property hooks for validation/computation instead of magic __get
  • Use the pipe operator to flatten nested calls (8.5+)

DON'T

  • Write @Route/@ORM\Column docblock annotations — use attributes
  • Emit 8.4/8.5 syntax without confirming the project supports it
  • Hand-roll getters/setters when hooks or readonly fit
  • Guess a feature's version — verify on php.net

What ships with it: 6 files

15.0 KB alongside SKILL.md

Keep looking

Skills are one crate of 326,851. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.