bg_image
header

PSR-12

PSR-12 is a coding style guideline defined by the PHP-FIG (PHP Framework Interoperability Group). It builds on PSR-1 (Basic Coding Standard) and PSR-2 (Coding Style Guide), extending them to include modern practices and requirements.


Purpose of PSR-12

PSR-12 aims to establish a consistent and readable code style for PHP projects, facilitating collaboration between developers and maintaining a uniform codebase.


Key Guidelines of PSR-12

1. Indentation

  • Use 4 spaces for indentation (no tabs).

2. Line Length

  • Maximum line length should not exceed 120 characters.
  • Code may be broken into multiple lines for better readability.

3. Namespace and Use Statements

  • Add one blank line after the namespace declaration.
  • use statements should follow the namespace declaration.
  • Imported classes, functions, and constants should be alphabetically sorted without blank lines between them.
namespace App\Controller;

use App\Service\MyService;
use Psr\Log\LoggerInterface;
use Psr\Log\LoggerInterface;

4. Classes

  • The opening { for a class or method must be placed on the next line.
  • Visibility (public, protected, private) is mandatory for all methods and properties.
class MyClass
{
    private string $property;

    public function myMethod(): void
    {
        // code
    }
}

5. Methods and Functions

  • Each parameter must be placed on a new line if the parameter list is wrapped.
  • Return types should be explicitly declared.
public function myFunction(
    int $param1,
    string $param2
): string {
    return 'example';
}

6. Control Structures (if, while, for, etc.)

  • The opening { must be on the same line as the control structure.
  • A space is required between the control structure and the condition.
if ($condition) {
    // code
} elseif ($otherCondition) {
    // code
} else {
    // code
}

7. Arrays

  • Use the short syntax ([]) for arrays.
  • In multiline arrays, each element should appear on a new line.
$array = [
    'first' => 'value1',
    'second' => 'value2',
];

8. Type Declarations

  • Parameter, return, and property types are mandatory (where possible).
  • Nullable types are prefixed with ?.
public function getValue(?int $id): ?string
{
    return $id !== null ? (string) $id : null;
}

9. Files

  • PHP files must start with the <?php tag and must not include a closing ?> tag.
  • Add blank lines between declarations like classes or functions.

Differences from PSR-2

PSR-12 extends PSR-2 by:

  • Supporting modern PHP features (e.g., nullable types, declare(strict_types=1), traits, type hinting).
  • Clarifying rules for line lengths, wrapped method parameters, and arrays.
  • Requiring explicit type declarations.

Benefits of PSR-12

  • Simplifies code reviews.
  • Improves readability and maintainability.
  • Enhances interoperability between PHP projects.
  • Ensures consistency with modern PHP practices.

Summary

PSR-12 is the standard for modern and consistent PHP code. It improves code quality and simplifies collaboration, especially in team environments. Tools like PHP_CodeSniffer or PHP-CS-Fixer can help ensure adherence to PSR-12 effortlessly.


PHP Mess Detector - PHPMD

PHP Mess Detector (PHPMD) is a static analysis tool for PHP that helps detect potential problems in your code. It identifies a wide range of code issues, including:

  1. Code Complexity: PHPMD checks for overly complex methods or classes, which may indicate areas that are difficult to maintain or extend.
  2. Unused Code: It can detect variables, parameters, and methods that are defined but not used, reducing unnecessary clutter in the codebase.
  3. Code Violations: PHPMD looks for violations related to clean code practices, such as long methods, large classes, or deeply nested conditionals.
  4. Maintainability: It provides insights into areas that may hinder the long-term maintainability of your project.

PHPMD is configurable, allowing you to define custom rules or use predefined rule sets like "unused code" or "naming conventions." It works similarly to PHP_CodeSniffer, but while CodeSniffer focuses more on style and formatting issues, PHPMD is more focused on the logic and structure of the code.

Key Features:

  • Customizable Rule Sets: You can tailor rules to match the specific requirements of your project.
  • Integration with Build Tools: It can be integrated into CI/CD pipelines to automatically check code for potential issues.
  • Extensible: Developers can extend PHPMD by writing custom rules for project-specific concerns.

In summary, PHPMD helps ensure code quality and maintainability by pointing out potential "messes" that might otherwise go unnoticed.

 


PHP CodeSniffer

PHP_CodeSniffer, often referred to as "Codesniffer," is a tool used to detect violations of coding standards in PHP code. It ensures that code adheres to specified standards, which improves readability, consistency, and maintainability across projects.

Key Features:

  1. Enforces Coding Standards: Codesniffer checks PHP files for adherence to rules like PSR-1, PSR-2, PSR-12, or custom standards. It helps developers write uniform code by highlighting issues.
  2. Automatic Fixing: It can automatically fix certain issues, such as correcting indentation or removing unnecessary whitespace.
  3. Integration with CI/CD: Codesniffer is often integrated into CI/CD pipelines to maintain code quality throughout the development process.

Uses:

  • Maintaining consistent code style in team environments.
  • Adopting and enforcing standards like PSR-12.
  • Offering real-time feedback within code editors (e.g., PHPStorm) as developers write code.

In summary, PHP_CodeSniffer helps improve the overall quality and consistency of PHP projects, making them easier to maintain in the long term.