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(ConexaoDbouConexaoDB). -
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 |