Skillshub php-best-practices

PHP best practices, PSR standards, and code quality guidelines. Use when writing PHP following PSR standards, SOLID principles, or improving code quality. (triggers: **/*.php, psr-12, camelCase, PascalCase, dry, solid)

install
source · Clone the upstream repo
git clone https://github.com/ComeOnOliver/skillshub
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ComeOnOliver/skillshub "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/HoangNguyen0403/agent-skills-standard/php-best-practices" ~/.claude/skills/comeonoliver-skillshub-php-best-practices && rm -rf "$T"
manifest: skills/HoangNguyen0403/agent-skills-standard/php-best-practices/SKILL.md
source content

PHP Best Practices

Priority: P1 (HIGH)

Structure

src/
├── {Domain}/             # e.g., Services, Repositories
└── Helpers/              # Pure functions/Traits

Implementation Guidelines

Coding Style (PSR Standards)

  • PSR-12: Enforce 4-space indentation and opening braces on same line for functions/methods.
  • Organization: One class per file; use statements follow the namespace. Run PHP CS Fixer with the PSR-12 preset.
  • Naming Conventions: Use
    PascalCase
    (UserService) for classes,
    camelCase
    (getUserById) for methods/variables, and
    SNAKE_CASE
    (MAX_RETRIES) for class constants.

SOLID Principles in PHP

  • SRP: Single Responsibility Principle — extract each into its own focused class; keep classes under ~200 lines.
  • Dependency Inversion: inject via constructor with interface type-hints. Inject dependencies via constructor for testability. Favor composition over deep inheritance chains.
  • Separation of Concerns: Use Interfaces for decoupling integrations and logic.

Logic & Performance

  • Guard Clauses: Return early for error conditions (e.g., if (!$user) return null); no else after return to reduce nesting depth.
  • Traits: Define trait HasTimestamps (e.g.,
    use HasTimestamps
    ) for cross-cutting behavior. Keep traits focused and lightweight.
  • Helper Functions: Avoid global-namespace logic; organize in classes.

Anti-Patterns

  • No monolithic classes: Each class has one responsibility (SRP).
  • No hardcoded magic numbers: Define as named class constants.
  • No deep nesting: Use guard clauses to return early.
  • No
    echo
    in services
    : Return data; let the controller output.

References