Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
asyrafhussin avatar

Php Best Practices

  • 2.5k installs
  • 58 repo stars
  • Updated May 16, 2026
  • asyrafhussin/agent-skills

php-best-practices is a PHP 8.x audit skill with 51 rules for types, PSR, SOLID, security, and performance.

About

The php-best-practices skill applies modern PHP 8.x patterns, PSR standards, SOLID principles, and security guidance through 51 rules grouped by type system, modern features, PSR compliance, SOLID, error handling, performance, and security priorities. Step one detects the project PHP version from composer.json require php constraints and runtime php -v output before suggesting syntax because features differ from 8.0 through 8.5 including enums, readonly classes, property hooks, and the 8.5 pipe operator. Type rules demand strict_types, return types, parameter and property types, union and intersection types, and avoiding mixed. Modern rules promote constructor promotion, match expressions, nullsafe operators, enums with methods, readonly properties, typed constants, Override attributes, and property hooks when version allows. PSR coverage spans PSR-4 autoloading, PSR-12 style, naming, and one class per file. Security rules require prepared SQL, password_hash, input validation, contextual output escaping, and safe upload handling. Audits output file:line category descriptions such as missing return types or deprecated patterns.

  • Detect PHP version from composer.json and php -v before suggesting syntax.
  • 51 rules span type-, modern-, psr-, solid-, error-, perf-, and sec- prefixes.
  • Feature table maps union types, enums, property hooks, and pipe operator versions.
  • Security rules mandate prepared statements, password_hash, and output escaping.
  • Audit output uses file:line - [category] issue description format.

Php Best Practices by the numbers

  • 2,466 all-time installs (skills.sh)
  • +109 installs in the week ending Jul 28, 2026 (Skillselion tracking)
  • Ranked #7 of 65 PHP & Laravel skills by installs in the Skillselion catalog
  • Security screen: LOW risk (skills.sh audit)
  • Data as of Jul 28, 2026 (Skillselion catalog sync)
At a glance

php-best-practices capabilities & compatibility

Capabilities
version aware feature availability matrix for ph · type system and modern php feature rule catalog · psr autoloading, style, and naming enforcement g · solid and error handling review checkpoints · security and performance rule quick reference wi
Use cases
code review · security audit · refactoring
From the docs

What php-best-practices says it does

Always check the project's PHP version before giving any advice.
SKILL.md
Contains 51 rules for writing clean, maintainable PHP code.
SKILL.md
declare(strict_types=1);
SKILL.md
npx skills add https://github.com/asyrafhussin/agent-skills --skill php-best-practices

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs2.5k
repo stars58
Security audit3 / 3 scanners passed
Last updatedMay 16, 2026
Repositoryasyrafhussin/agent-skills

How do I review PHP code for modern 8.x patterns, type safety, and security issues?

Audit PHP 8.x code against 51 typed, PSR, SOLID, security, and performance rules matched to the project PHP version.

Who is it for?

PHP 8.0 through 8.5 projects needing structured code review against community rules.

Skip if: Skip for non-PHP stacks or greenfield framework selection without PHP source to audit.

When should I use this skill?

User asks to review PHP, check PHP code, audit PHP, or apply PHP best practices.

What you get

A version-aware audit listing file:line findings across type, modern, PSR, SOLID, and security categories.

  • PHP quality audit report
  • PSR compliance notes
  • Type-safety recommendations

By the numbers

  • Contains 51 rules for PHP code quality
  • Supports PHP 8.0 through 8.5
  • Version 2.1.0

Files

SKILL.mdMarkdownGitHub ↗

PHP Best Practices

Modern PHP 8.x patterns, PSR standards, type system best practices, and SOLID principles. Contains 51 rules for writing clean, maintainable PHP code.

Step 1: Detect PHP Version

Always check the project's PHP version before giving any advice. Features vary significantly across 8.0 - 8.5. Never suggest syntax that doesn't exist in the project's version.

Check composer.json for the required PHP version:

{ "require": { "php": "^8.1" } }   // -> 8.1 rules and below
{ "require": { "php": "^8.3" } }   // -> 8.3 rules and below
{ "require": { "php": ">=8.4" } }  // -> 8.4 rules and below

Also check the runtime version:

php -v   # e.g. PHP 8.3.12

Feature Availability by Version

FeatureVersionRule Prefix
Union types, match, nullsafe, named args, constructor promotion, attributes8.0+type-, modern-
Enums, readonly properties, intersection types, first-class callables, never, fibers8.1+modern-
Readonly classes, DNF types, true/false/null standalone types8.2+modern-
Typed class constants, #[\Override], json_validate()8.3+modern-
Property hooks, asymmetric visibility, #[\Deprecated], new without parens8.4+modern-
Pipe operator `>`8.5+

Only suggest features available in the detected version. If the user asks about upgrading or newer features, mention what becomes available at each version.

When to Apply

Reference these guidelines when:

  • Writing or reviewing PHP code
  • Implementing classes and interfaces
  • Using PHP 8.x modern features
  • Ensuring type safety
  • Following PSR standards
  • Applying design patterns

Rule Categories by Priority

PriorityCategoryImpactPrefixRules
1Type SystemCRITICALtype-9
2Modern PHP FeaturesCRITICALmodern-16
3PSR StandardsHIGHpsr-6
4SOLID PrinciplesHIGHsolid-5
5Error HandlingHIGHerror-5
6PerformanceMEDIUMperf-5
7SecurityCRITICALsec-5

Quick Reference

1. Type System (CRITICAL) — 9 rules

  • type-strict-mode - Declare strict types in every file
  • type-return-types - Always declare return types
  • type-parameter-types - Type all parameters
  • type-property-types - Type class properties
  • type-union-types - Use union types effectively
  • type-intersection-types - Use intersection types
  • type-nullable-types - Handle nullable types properly
  • type-void-never - Use void/never for appropriate return types
  • type-mixed-avoid - Avoid mixed type when possible

2. Modern PHP Features (CRITICAL) — 16 rules

8.0+:

  • modern-constructor-promotion - Constructor property promotion
  • modern-match-expression - Match over switch
  • modern-named-arguments - Named arguments for clarity
  • modern-nullsafe-operator - Nullsafe operator (?->)
  • modern-attributes - Attributes for metadata

8.1+:

  • modern-enums - Enums instead of constants
  • modern-enums-methods - Enums with methods and interfaces
  • modern-readonly-properties - Readonly for immutable data
  • modern-first-class-callables - First-class callable syntax
  • modern-arrow-functions - Arrow functions (7.4+, pairs well with 8.1 features)

8.2+:

  • modern-readonly-classes - Readonly classes

8.3+:

  • modern-typed-constants - Typed class constants (const string NAME = 'foo')
  • modern-override-attribute - #[\Override] to catch parent method typos

8.4+:

  • modern-property-hooks - Property hooks replacing getters/setters
  • modern-asymmetric-visibility - public private(set) for controlled access

8.5+:

  • modern-pipe-operator - Pipe operator (|>) for functional chaining

3. PSR Standards (HIGH) — 6 rules

  • psr-4-autoloading - Follow PSR-4 autoloading
  • psr-12-coding-style - Follow PSR-12 coding style
  • psr-naming-classes - Class naming conventions
  • psr-naming-methods - Method naming conventions
  • psr-file-structure - One class per file
  • psr-namespace-usage - Proper namespace usage

4. SOLID Principles (HIGH) — 5 rules

  • solid-srp - Single Responsibility: one reason to change
  • solid-ocp - Open/Closed: extend, don't modify
  • solid-lsp - Liskov Substitution: subtypes must be substitutable
  • solid-isp - Interface Segregation: small, focused interfaces
  • solid-dip - Dependency Inversion: depend on abstractions

5. Error Handling (HIGH) — 5 rules

  • error-custom-exceptions - Create specific exceptions for different errors
  • error-exception-hierarchy - Organize exceptions into meaningful hierarchy
  • error-try-catch-specific - Catch specific exceptions, not generic \Exception
  • error-finally-cleanup - Use finally for guaranteed resource cleanup
  • error-never-suppress - Never use @ error suppression operator

6. Performance (MEDIUM) — 5 rules

  • perf-avoid-globals - Avoid global variables, use dependency injection
  • perf-lazy-loading - Defer expensive operations until needed
  • perf-array-functions - Use native array functions over manual loops
  • perf-string-functions - Use native string functions over regex
  • perf-generators - Use generators for large datasets

7. Security (CRITICAL) — 5 rules

  • sec-input-validation - Validate and sanitize all external input
  • sec-output-escaping - Escape output based on context (HTML, JS, URL)
  • sec-password-hashing - Use password_hash/verify, never MD5/SHA1
  • sec-sql-prepared - Use prepared statements for all SQL queries
  • sec-file-uploads - Validate file type, size, name; store outside web root

Essential Guidelines

For detailed examples and explanations, see the rule files:

  • type-strict-mode.md - Strict types declaration
  • modern-constructor-promotion.md - Constructor property promotion
  • modern-enums.md - PHP 8.1+ enums with methods
  • solid-srp.md - Single responsibility principle

Key Patterns (Quick Reference)

<?php
declare(strict_types=1);

// 8.0+ Constructor promotion + readonly (8.1+)
class User
{
    public function __construct(
        public readonly string $id,
        private string $email,
    ) {}
}

// 8.1+ Enums with methods
enum Status: string
{
    case Active = 'active';
    case Inactive = 'inactive';

    public function label(): string
    {
        return match($this) {
            self::Active => 'Active',
            self::Inactive => 'Inactive',
        };
    }
}

// 8.0+ Match expression
$result = match($status) {
    'pending' => 'Waiting',
    'active' => 'Running',
    default => 'Unknown',
};

// 8.0+ Nullsafe operator
$country = $user?->getAddress()?->getCountry();

// 8.3+ Typed class constants + #[\Override]
class PaymentService extends BaseService
{
    public const string GATEWAY = 'stripe';

    #[\Override]
    public function process(): void { /* ... */ }
}

// 8.4+ Property hooks + asymmetric visibility
class Product
{
    public string $name { set => trim($value); }
    public private(set) float $price;
}

// 8.5+ Pipe operator
$result = $input
    |> trim(...)
    |> strtolower(...)
    |> htmlspecialchars(...);

Output Format

When auditing code, output findings in this format:

file:line - [category] Description of issue

Example:

src/Services/UserService.php:15 - [type] Missing return type declaration
src/Models/Order.php:42 - [modern] Use match expression instead of switch
src/Controllers/ApiController.php:28 - [solid] Class has multiple responsibilities

How to Use

Read individual rule files for detailed explanations:

rules/modern-constructor-promotion.md
rules/type-strict-mode.md
rules/solid-srp.md

Related skills

How it compares

Use php-best-practices for opinionated PSR and SOLID review guidance when a human-readable audit checklist is needed alongside or before running PHPStan or Psalm.

FAQ

Why must PHP version be detected first?

Features like enums, readonly classes, property hooks, and pipe operator differ across 8.0 to 8.5.

How many rules does the skill include?

51 rules across seven priority categories from type system through security.

What format do audit findings use?

file:line - [category] Description, for example a missing return type under [type].

Is Php Best Practices safe to install?

skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.