Home Blog PSR Standards Every PHP Dev Should Know
Back to Blog
Backend

PSR Standards Every PHP Dev Should Know

acretph_manny
Jhon Manny Loto
Backend Specialist
August 3, 2026
Blog Image

Understanding and applying PSR standards is a foundational skill for any professional PHP developer. From basic naming conventions in PSR‑1 to advanced middleware patterns in PSR‑15, these recommendations create a shared baseline that enhances code quality, collaboration, and long‑term project health. By integrating the relevant PSR specifications into your workflow, you position your codebase to take full advantage of the vibrant PHP ecosystem and ensure that your applications remain robust, scalable, and maintainable.

Introduction

PHP Standard Recommendations (PSR) form a set of agreed‑upon guidelines that bring consistency, interoperability, and quality to PHP projects. By following these standards, developers can write code that is easier to read, maintain, and integrate with third‑party libraries. This article provides a comprehensive overview of the most important PSR specifications that every PHP developer should understand and apply.

Overview of PSR

The PHP Framework Interop Group (PHP‑FIG) publishes PSR documents to address common challenges in the PHP ecosystem. Each PSR focuses on a specific aspect of development, ranging from basic coding style to advanced architectural patterns. While some specifications have been superseded by newer versions, the core ideas remain relevant and are widely adopted across modern frameworks such as Laravel, Symfony, and Laminas.

Core PSR Recommendations

PSR‑1 Basic Coding Standard

  • Files must use only UTF‑8 without a BOM.
  • Each file must declare strict types if the developer chooses to enforce them.
  • Class names, method names, and constants follow a case‑sensitive naming convention.
  • Autoloadable classes must be placed in a file that matches the class name.

PSR‑2 Coding Style Guide (historical reference)

  • Indentation is four spaces, never tabs.
  • Opening braces for classes, methods, and control structures appear on the next line.
  • Lines should not exceed 120 characters; longer lines may be split across multiple lines.
  • Control structure keywords (if, while, for, foreach, switch) are followed by a single space and parentheses.

PSR‑3 Logger Interface

  • Defines a common `LoggerInterface` with eight log levels (emergency, alert, critical, error, warning, notice, info, debug).
  • Provides a `log($level, $message, array $context = [])` method for flexible logging.
  • Encourages the use of placeholders in messages, e.g., `User {id} created`.

PSR‑4 Autoloading Standard

  • Maps a namespace prefix to a base directory.
  • The fully qualified class name translates to a file path by replacing namespace separators with directory separators and appending `.php`.
  • Enables Composer to automatically load classes without manual `require` statements.

PSR‑6 Caching Interface

  • Introduces `CacheItemPoolInterface` and `CacheItemInterface` for standardized caching operations.
  • Supports basic methods such as `getItem()`, `save()`, `deleteItem()`, and `clear()`.
  • Allows interchangeable cache implementations (APCu, Redis, Memcached) without code changes.

PSR‑7 HTTP Message Interface

  • Provides immutable `RequestInterface`, `ResponseInterface`, `ServerRequestInterface`, and `StreamInterface`.
  • Encourages a middleware‑friendly architecture where each component receives and returns a new message instance.
  • Facilitates framework‑agnostic handling of HTTP requests and responses.

PSR‑12 Extended Coding Style

  • Builds on PSR‑2 with additional rules for namespaces, traits, and property declarations.
  • Requires a single blank line after the opening PHP tag and before the closing tag.
  • Enforces visibility declarations for all class properties and methods.
  • Standardizes the placement of type declarations and return types.

PSR‑14 Event Dispatcher

  • Defines `EventDispatcherInterface` with a `dispatch(object $event)` method.
  • Supports listeners that can modify the event object or halt propagation.
  • Enables decoupled communication between components, useful for plugin systems and domain events.

PSR‑15 HTTP Server Request Handlers

  • Introduces `RequestHandlerInterface` with a `handle(ServerRequestInterface $request): ResponseInterface` method.
  • Works together with PSR‑7 to create a clear contract for middleware and request handling pipelines.
  • Simplifies the creation of reusable middleware stacks.

How to Adopt PSR in Your Projects

1. Enable Composer Autoloading – Add a `psr-4` entry in `composer.json` that maps your project's namespace to the source directory.

2. Configure a Linter – Use tools such as PHP_CodeSniffer with the `PSR12` standard to enforce coding style automatically.

3. Integrate a Logger – Implement a PSR‑3 compatible logger (Monolog) and inject it via dependency injection.

4. Standardize Caching – Replace custom cache wrappers with a PSR‑6 compliant library, ensuring future flexibility.

5. Adopt Middleware – Build request handling pipelines that conform to PSR‑7 and PSR‑15, allowing easy swapping of components.

6. Leverage Event Dispatching – Use a PSR‑14 dispatcher to decouple business logic from side effects such as notifications or audits.

7. Run Automated Tests – Verify that your code respects the contracts defined by each PSR, catching regressions early.

Benefits of Following PSR

  • Consistency – Team members share a common coding language, reducing onboarding time.
  • Interoperability – Libraries that implement the same PSR can be mixed without friction.
  • Maintainability – Clear conventions make refactoring and code reviews more efficient.
  • Future‑Proofing – Adhering to standards protects against vendor lock‑in and eases migration to newer frameworks.
  • Community Support – Most PHP tools and frameworks provide built‑in support for PSR, simplifying configuration.

Conclusion

Understanding and applying PSR standards is a foundational skill for any professional PHP developer. From basic naming conventions in PSR‑1 to advanced middleware patterns in PSR‑15, these recommendations create a shared baseline that enhances code quality, collaboration, and long‑term project health. By integrating the relevant PSR specifications into your workflow, you position your codebase to take full advantage of the vibrant PHP ecosystem and ensure that your applications remain robust, scalable, and maintainable.

Tags:
Backend
acretph_manny
Jhon Manny Loto
Backend Specialist
My identity has been shaped in the countryside part of the Philippines! To travel around the world is something I wish of. In spite of the continual struggle, faith and courage were my main motivation to keep going because I believe no matter how you feel, just get up, dress up, show up and never give up. Great things are yet to come. Becoming part of Acret-PH is a great opportunity for me to nurture my knowledge and skills. I started with a zero-knowledge in Drupal, yet it was never a hindrance for me to cope up and learn since my seniors and fellow workmates have been very helpful.

Table of Contents

AcretPhilippines Inc.
Bringing Japanese software development excellence to the Philippine market since 2019.

Acret Philippines Inc.

14th Floor Latitude Corporate Center

Cebu Business Park

Lahug, Cebu City

TEL: 032-344-3847

09:00 AM - 06:00 PM (PHT)

Head Office Acret Inc.

〒650-0011

601 Kenso Building, 2-13-3 Shimoyamate-dori

Chuo-ku Kobe-shi, Hyogo, Japan

TEL:+81 78-599-8511

10:00-17:00 JPT

© 2025 Acret Philippines Inc. All rights reserved.