Skip to content
acc-psr-overview-knowledge logo

PSR Overview Knowledge

acc-psr-overview-knowledge

PHP Standards Recommendations (PSR) overview knowledge base. Provides comprehensive reference for all accepted PSRs including PSR-1,3,4,6,7,11,12,13,14,15,16,17,18,20. Use for PSR selection decisions and compliance audits.

SKILL.md

Full skill instructions

PSR Overview Knowledge

What is PSR?

PSR (PHP Standards Recommendations) are specifications published by the PHP Framework Interoperability Group (PHP-FIG). They establish common standards for PHP code to ensure interoperability between frameworks and libraries.

Accepted PSRs Summary

PSRNameCategoryStatus
PSR-1Basic Coding StandardCoding StyleAccepted
PSR-3Logger InterfaceLoggingAccepted
PSR-4AutoloaderAutoloadingAccepted
PSR-6Caching InterfaceCachingAccepted
PSR-7HTTP Message InterfaceHTTPAccepted
PSR-11Container InterfaceDI ContainerAccepted
PSR-12Extended Coding StyleCoding StyleAccepted
PSR-13Hypermedia LinksHypermediaAccepted
PSR-14Event DispatcherEventsAccepted
PSR-15HTTP HandlersHTTPAccepted
PSR-16Simple CacheCachingAccepted
PSR-17HTTP FactoriesHTTPAccepted
PSR-18HTTP ClientHTTPAccepted
PSR-20ClockTimeAccepted

PSR Categories

Coding Style (PSR-1, PSR-12)

Standards for writing clean, consistent PHP code.

AspectPSR-1PSR-12
ScopeBasic rulesExtended formatting
File encodingUTF-8 without BOMInherits PSR-1
Class namesStudlyCapsInherits PSR-1
Method namescamelCaseInherits PSR-1
Indentation-4 spaces
Line length-120 chars soft limit
Keywords-Lowercase

Autoloading (PSR-4)

Standard for autoloading classes from file paths.

Namespace Prefix → Base Directory
App\             → src/

FQCN                          → File Path
App\Domain\User\Entity\User   → src/​Domain/​User/​Entity/​User.php

HTTP (PSR-7, PSR-15, PSR-17, PSR-18)

Standards for HTTP messages, handlers, factories, and clients.

PSRPurposeKey Interfaces
PSR-7HTTP MessagesRequestInterface, ResponseInterface, StreamInterface
PSR-15HTTP HandlersMiddlewareInterface, RequestHandlerInterface
PSR-17HTTP FactoriesRequestFactoryInterface, ResponseFactoryInterface
PSR-18HTTP ClientClientInterface
PSR-17 (Factory) → PSR-7 (Message) → PSR-15 (Handler) → PSR-7 (Response)
                                          ↓
                                   PSR-18 (Client)

Caching (PSR-6, PSR-16)

Standards for caching implementations.

AspectPSR-6PSR-16
ComplexityFull-featuredSimple
Key interfacesCacheItemPoolInterface, CacheItemInterfaceCacheInterface
Deferred savesYesNo
Use caseComplex caching needsSimple get/​set

Logging (PSR-3)

Standard for logging libraries.

interface LoggerInterface {
    public function emergency(string|\Stringable $message, array $context = []): void;
    public function alert(string|\Stringable $message, array $context = []): void;
    public function critical(string|\Stringable $message, array $context = []): void;
    public function error(string|\Stringable $message, array $context = []): void;
    public function warning(string|\Stringable $message, array $context = []): void;
    public function notice(string|\Stringable $message, array $context = []): void;
    public function info(string|\Stringable $message, array $context = []): void;
    public function debug(string|\Stringable $message, array $context = []): void;
    public function log(mixed $level, string|\Stringable $message, array $context = []): void;
}

DI Container (PSR-11)

Standard for dependency injection containers.

interface ContainerInterface {
    public function get(string $id): mixed;
    public function has(string $id): bool;
}

Events (PSR-14)

Standard for event dispatching.

interface EventDispatcherInterface {
    public function dispatch(object $event): object;
}

interface ListenerProviderInterface {
    public function getListenersForEvent(object $event): iterable;
}

interface StoppableEventInterface {
    public function isPropagationStopped(): bool;
}

Hypermedia (PSR-13)

Standard for hypermedia links (HATEOAS).

interface LinkInterface {
    public function getHref(): string;
    public function isTemplated(): bool;
    public function getRels(): array;
    public function getAttributes(): array;
}

Time (PSR-20)

Standard for clock abstraction.

interface ClockInterface {
    public function now(): DateTimeImmutable;
}

When to Use Each PSR

Decision Matrix

NeedPSR
Code formattingPSR-1, PSR-12
Class autoloadingPSR-4
LoggingPSR-3
Simple caching (get/​set)PSR-16
Complex caching (pools, tags)PSR-6
HTTP requests/​responsesPSR-7
HTTP middlewarePSR-15
Creating HTTP objectsPSR-17
HTTP client for external APIsPSR-18
Dependency injectionPSR-11
Event systemPSR-14
REST API with linksPSR-13
Testing with timePSR-20

Common Combinations

Use CasePSRs
HTTP APIPSR-7 + PSR-15 + PSR-17
HTTP ClientPSR-7 + PSR-17 + PSR-18
Web ApplicationPSR-1 + PSR-4 + PSR-12 + PSR-3 + PSR-11
CQRS/​Event-DrivenPSR-14 + PSR-3 + PSR-11
MicroserviceAll of the above

PHP Package Implementations

PSR-3: Logger

PackageDescription
monolog/​monologDe facto standard logger
psr/​logInterface only

PSR-4: Autoloader

PackageDescription
ComposerBuilt-in autoloader

PSR-6: Cache

PackageDescription
symfony/​cacheFull-featured cache
cache/​filesystem-adapterFile-based cache

PSR-7/​PSR-17: HTTP

PackageDescription
guzzlehttp/​psr7Guzzle implementation
nyholm/​psr7Lightweight implementation
laminas/​laminas-diactorosLaminas implementation

PSR-11: Container

PackageDescription
php-di/​php-diAutowiring DI container
league/​containerFlexible container
pimple/​pimpleSimple container

PSR-14: Event Dispatcher

PackageDescription
symfony/​event-dispatcherSymfony implementation
league/​eventLeague implementation

PSR-15: HTTP Handlers

PackageDescription
middlewares/​utilsMiddleware utilities
relay/​relaySimple dispatcher

PSR-18: HTTP Client

PackageDescription
guzzlehttp/​guzzleFull HTTP client
symfony/​http-clientSymfony HTTP client

PSR-20: Clock

PackageDescription
psr/​clockInterface only
symfony/​clockSymfony implementation
lcobucci/​clockSimple implementation

Composer Requirements

{
    "require": {
        "psr/​log": "^3.0",
        "psr/​cache": "^3.0",
        "psr/​http-message": "^2.0",
        "psr/​http-factory": "^1.0",
        "psr/​http-client": "^1.0",
        "psr/​container": "^2.0",
        "psr/​event-dispatcher": "^1.0",
        "psr/​link": "^2.0",
        "psr/​clock": "^1.0",
        "psr/​simple-cache": "^3.0"
    }
}

Integration with DDD

Layer Mapping

DDD LayerRelevant PSRs
DomainPSR-14 (Domain Events)
ApplicationPSR-3, PSR-11, PSR-14, PSR-20
InfrastructurePSR-6, PSR-16, PSR-18
PresentationPSR-7, PSR-15, PSR-17

Example: CQRS Application

<?php

declare(strict_types=1);

namespace App\Application\User\Handler;

use App\Application\User\Command\CreateUserCommand;
use App\Domain\User\Entity\User;
use App\Domain\User\Repository\UserRepositoryInterface;
use Psr\EventDispatcher\EventDispatcherInterface;  // PSR-14
use Psr\Log\LoggerInterface;                       // PSR-3
use Psr\Clock\ClockInterface;                      // PSR-20

final readonly class CreateUserHandler
{
    public function __construct(
        private UserRepositoryInterface $repository,
        private EventDispatcherInterface $eventDispatcher,
        private LoggerInterface $logger,
        private ClockInterface $clock,
    ) {
    }

    public function __invoke(CreateUserCommand $command): void
    {
        $this->logger->info('Creating user', ['email' => $command->email]);

        $user = User::create(
            $command->email,
            $command->name,
            $this->clock->now(),
        );

        $this->repository->save($user);

        foreach ($user->pullEvents() as $event) {
            $this->eventDispatcher->dispatch($event);
        }
    }
}

Compliance Checklist

PSRRequired ForCheck
PSR-1All PHP projectsphpcs --standard=PSR1
PSR-12All PHP projectsphpcs --standard=PSR12
PSR-4All PHP projectscomposer dump-autoload --strict
PSR-3Projects with loggingImplement LoggerInterface
PSR-6/​16Projects with cachingImplement CacheInterface
PSR-7HTTP APIsUse PSR-7 implementations
PSR-11Projects with DIImplement ContainerInterface
PSR-14Event-driven projectsImplement EventDispatcherInterface
PSR-15HTTP middlewareImplement MiddlewareInterface
PSR-17HTTP object creationUse factory interfaces
PSR-18External API callsImplement ClientInterface
PSR-20Time-sensitive codeImplement ClockInterface

See Also

  • references/​accepted-psrs.md - Detailed PSR descriptions
  • references/​when-to-use.md - Decision matrix for PSR selection
  • references/​compatibility.md - Inter-PSR relationships
  • references/​php-fig-process.md - How PSRs are created
  • assets/​psr-selection-guide.md - Selection guide template

More skills from diegosouzapw

accessibility logo
diegosouzapw/awesome-omni-skill

accessibility

Accessibility guidelines for VS Code features — covers accessibility help dialogs, accessible views, verbosity settings, accessibility signals, ARIA alerts/status announcements, keyboard navigation, and ARIA labels/roles. Applies to both new interactive UI surfaces and updates to existing feature...

62 1
View
mermaid-diagrams logo
diegosouzapw/awesome-omni-skill

mermaid-diagrams

Mermaid diagram creation for flowcharts, sequences, ERDs, and more. Generate diagrams from text in markdown files. Use for documentation, architecture diagrams, and visual representations. Triggers on mermaid, flowchart, sequence diagram, ERD, entity relationship, gantt chart, pie chart, class di...

62 1
View
tauri2-react-rust logo
diegosouzapw/awesome-omni-skill

tauri2-react-rust

Guides development of cross-platform desktop apps with Tauri 2, TypeScript, React, and Rust. Use when building Tauri apps, implementing IPC, designing Rust backend or TypeScript/React frontend, when researching or cloning a website (open site, snapshot elements), when verifying local dev or built...

62 1
View
fp-ts-errors logo
diegosouzapw/awesome-omni-skill

fp-ts-errors

Handle errors as values using fp-ts Either and TaskEither for cleaner, more predictable TypeScript code. Use when implementing error handling patterns with fp-ts.

62 0
View
ring:pre-dev-research logo
diegosouzapw/awesome-omni-skill

ring:pre-dev-research

Gate 0 research phase for pre-dev workflow. Dispatches 3 parallel research agents to gather codebase patterns, external best practices, and framework documentation BEFORE creating PRD/TRD. Outputs research.md with file:line references.

62 0
View
create-assistant logo
diegosouzapw/awesome-omni-skill

create-assistant

Create and configure Vapi voice AI assistants with models, voices, transcribers, tools, hooks, and advanced settings. Use when building voice agents, phone bots, customer support assistants, or any conversational AI that handles phone or web calls.

62 0
View
codex-headless logo
diegosouzapw/awesome-omni-skill

codex-headless

Delegiere Aufgaben an OpenAI Codex CLI im Headless-Mode. Nutzt ChatGPT Subscription (KEIN API Key). Nur Workspace-Zugriff, KEIN System-Zugriff. Auto-Accept mit --full-auto. Web-Recherche mit --search.

62 0
View
social-media-scheduler logo
diegosouzapw/awesome-omni-skill

social-media-scheduler

Generate a full week of social media content for any topic. Outputs platform-optimized posts for Twitter/X, LinkedIn, and Instagram with hashtags and posting times.

62 0
View
Data Privacy Compliance logo
diegosouzapw/awesome-omni-skill

Data Privacy Compliance

Data privacy and regulatory compliance specialist for GDPR, CCPA, HIPAA, and international data protection laws. Use when implementing privacy controls, conducting data protection impact assessments, ensuring regulatory compliance, or managing data subject rights. Expert in consent management, da...

62 0
View
triple-review logo
diegosouzapw/awesome-omni-skill

triple-review

Reviews a task using the TRIPLE protocol, as the review agent.

62 0
View
Tech Stack & Architecture Decision logo
diegosouzapw/awesome-omni-skill

Tech Stack & Architecture Decision

Define and document the technology stack and architecture decisions for a project. Use when the user needs to choose a tech stack, make architecture decisions, define infrastructure choices, or document technology selections. Triggers on requests like "define the tech stack", "choose technologies...

62 0
View

Popular AI tools

Kaiber logo
Video

Kaiber

Generate, edit, and beat-sync AI video with leading models in one workspace.

Paid
View
Vimcal logo
Productivity

Vimcal

The world's fastest calendar for remote work

Free
View

Transform Your Design with AI Designer by ImgCreator.ai

Freemium
View
Akool AI logo
Content & writing

Akool AI

Revolutionizing Video Production with AI-Powered Creativity

Paid
View

Extend an image past the frame and let AI fill the new aspect ratio.

Freemium
View
StarByFace logo
Security

StarByFace

Discover your celebrity doppelgänger with StarByFace!

Free
View
C

ChainClarity explains 700+ crypto whitepapers in plain English, with layered summaries, comparisons, research tools, alerts, and a $4.99 Pro plan.

Freemium
View
Opus Clip logo
Coding & apps

Opus Clip

Opus.ai: Revolutionize Your Web Experience

Free
View