Agent Skills: PHP Language Standards

Apply core PHP language standards and modern 8.x features. Use when working with PHP 8.x features like enums, fibers, readonly properties, or named arguments. (triggers: **/*.php, declare, readonly, match, constructor, promotion, types)

UncategorizedID: hoangnguyen0403/agent-skills-standard/php-language

Install this agent skill to your local

pnpm dlx add-skill https://github.com/HoangNguyen0403/agent-skills-standard/tree/HEAD/skills/php/php-language

Skill Files

Browse the full folder contents for php-language.

Download Skill

Loading file tree…

skills/php/php-language/SKILL.md

Skill Metadata

Name
php-language
Description
"Apply core PHP language standards and modern 8.x features. Use when working with PHP 8.x features like enums, fibers, readonly properties, or named arguments. (triggers: **/*.php, declare, readonly, match, constructor, promotion, types)"

PHP Language Standards

Priority: P0 (CRITICAL)

Structure

src/
└── {Namespace}/
    └── {Class}.php

Implementation Guidelines

Core Language Standards

  • Strict Typing: Declare declare(strict_types=1); at the very top of every file.
  • Type Hinting: Apply scalar type hints (e.g., string, int) and return types to all functions.
  • Strict Comparison: Avoid loose == comparison; always use === for strict equality.

Modern PHP 8+ Patterns

  • Match Expressions: Prefer match($status) over switch for value returns. It provides strict comparison and is exhaustive by default.
  • Default Case: Use default => throw new InvalidArgumentException($status) to handle unknown states.
  • Read-only: Use public readonly string $name for properties set once at construction.
  • Property Promotion: Use public function __construct(public string $name) {} to reduce boilerplate.
  • Named Arguments: Call functions with name: 'John', age: 25 to skip optional parameters.
  • Flexible Types: Use Union types (int|string) and Intersection types (Countable&Traversable).

Anti-Patterns

  • No untyped functions: Declare return and parameter types always.
  • No loose == comparison: Use === for strict equality.
  • No switch for value mapping: Use match expressions instead.
  • No global namespace logic: Organize in classes and namespaces.

References