Agent-skills-standard php-best-practices
Write PHP following 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/HoangNguyen0403/agent-skills-standard
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/HoangNguyen0403/agent-skills-standard "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/php/php-best-practices" ~/.claude/skills/hoangnguyen0403-agent-skills-standard-php-best-practices && rm -rf "$T"
manifest:
skills/php/php-best-practices/SKILL.mdsource 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 namespace. Run PHP CS Fixer with PSR-12 preset.
- Naming Conventions: Use
(UserService) for classes,PascalCase
(getUserById) for methods/variables, andcamelCase
(MAX_RETRIES) for class constants.SNAKE_CASE
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.,
) for cross-cutting behavior. Keep traits focused and lightweight.use HasTimestamps - Helper Functions: Avoid global-namespace logic; organize in classes.
Anti-Patterns
- No monolithic classes: Each class one responsibility (SRP).
- No hardcoded magic numbers: Define as named class constants.
- No deep nesting: Use guard clauses to return early.
- No
in services: Return data; let controller output.echo