As PSRs (PHP Standards Recommendations) são recomendações de padrões desenvolvidas pelo PHP-FIG (PHP Framework Interop Group). Elas não são “regras” obrigatórias da linguagem, mas seguem um padrão de mercado que garante que o código escrito por você seja compreendido e facilmente integrado por qualquer outro desenvolvedor no mundo.

Neste artigo, vamos pegar um código “caótico” e aplicar as principais PSRs para transformá-lo em um padrão de indústria.

O Cenário Inicial: Código Despadronizado Link para o cabeçalho

Aqui está um exemplo de como não devemos escrever código PHP:

<?php
namespace App;
class conexaoDB {
    public function Conectar($user, $pass){
        $this->conn = mysqli_connect("localhost", $user, $pass, "banco");
        return $this->conn;
    }
}
$db = new conexaoDB();

1. PSR-1 e PSR-12: O Padrão de Estilo e Estrutura Link para o cabeçalho

A PSR-1 define regras básicas de estilo (como <?php e uso de UTF-8), enquanto a PSR-12 expande isso com regras detalhadas de indentação, chaves e nomes.

Mudanças a aplicar:

  • Classes: Devem seguir o padrão PascalCase (ConexaoDb ou ConexaoDB).

  • Métodos: Devem seguir o padrão camelCase (conectar e não Conectar).

Chaves: Devem estar em uma nova linha.

Código após PSR-1/12:

<?php

namespace App;

class ConexaoDb
{
    public function conectar($user, $pass)
    {
        $this->conn = mysqli_connect("localhost", $user, $pass, "banco");
        return $this->conn;
    }
}

2. PSR-4: Autoloading Link para o cabeçalho

Antigamente, usávamos require_once. A PSR-4 dita que existe uma relação direta entre o namespace e o caminho físico das pastas.

Como aplicar: Se a sua classe está em src/Database/ConexaoDb.php, seu namespace deve ser App\Database. No composer.json, você configura:

"autoload": {
    "psr-4": {
        "App\\": "src/"
    }
}

Isso elimina a necessidade de incluir arquivos manualmente em cada página.

3. PSR-7 e PSR-17: Interfaces para HTTP Link para o cabeçalho

A PSR-7 padroniza como representamos requisições (Requests) e respostas (Responses) HTTP, evitando que cada framework crie sua própria forma de ler o que o usuário enviou.

Exemplo prático de uso com uma Request: Em vez de usar $_GET ou $_POST diretamente, usamos objetos que implementam a PSR-7:

use Psr\Http\Message\ServerRequestInterface;

public function processar(ServerRequestInterface $request) 
{
    $params = $request->getQueryParams(); // Padronizado e seguro
    // ...
}

4. PSR-3: Logger Interface Link para o cabeçalho

Se você precisa registrar logs de erros, não reinvente a roda. A PSR-3 define uma interface (LoggerInterface) que permite trocar o seu sistema de log (ex: trocar arquivo local por um serviço na nuvem) sem alterar uma linha do seu código principal.

Exemplo:

use Psr\Log\LoggerInterface;

class ConexaoDb {
    private $logger;

    public function __construct(LoggerInterface $logger) {
        $this->logger = $logger;
    }

    public function conectar() {
        $this->logger->info("Conectando ao banco...");
    }
}
Padrão Objetivo Benefício
PSR-1/12 Estilo de escrita Legibilidade e consistência
PSR-4 Carregamento de classes Organização de pastas (Autoload)
PSR-3 Logs Independência de bibliotecas
PSR-7 HTTP Messages Interoperabilidade entre frameworks