Clean Code em PHP: princípios e exemplos para código limpo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Clean Code em PHP: princípios e exemplos na prática

\n

Código limpo não é um luxo, mas uma necessidade para qualquer desenvolvedor PHP profissional. Quando você escreve código fácil de ler, entender e modificar, economiza tempo para si e para sua equipe. Neste artigo, vamos analisar os princípios-chave do Clean Code em PHP com exemplos concretos que podem ser aplicados imediatamente em projetos.

\n\n

Por que o código limpo é importante para projetos PHP?

\n

PHP é uma linguagem flexível, mas essa flexibilidade muitas vezes leva ao caos se a qualidade do código não for monitorada. O código limpo ajuda a:

\n
    \n
  • Encontrar e corrigir erros mais rapidamente;
  • \n
  • Adicionar novas funcionalidades facilmente sem o risco de quebrar a lógica existente;
  • \n
  • Reduzir o tempo de integração de novos desenvolvedores no projeto;
  • \n
  • Aumentar a estabilidade geral da aplicação.
  • \n
\n

Vamos passar para os princípios e exemplos específicos.

\n\n

Nomes corretos de variáveis e funções

\n

O primeiro passo para um código limpo são nomes significativos. O nome deve responder à pergunta "O que é isso?" ou "O que faz?".

\n\n

Exemplo ruim

\n
<?php\n$a = 86400;\n$b = $a * 7;\n$c = $b * 0.8;
\n\n

Exemplo bom (Clean Code)

\n
<?php\n$secondsPerDay = 86400;\n$weeklySeconds = $secondsPerDay * 7;\n$discountedWeeklySeconds = $weeklySeconds * 0.8;
\n\n

Princípio: Os nomes devem ser descritivos e não exigir comentários. Evite abreviações (exceto as amplamente aceitas, como $i para contador de loop).

\n\n

Exemplo para funções

\n
<?php\n// Ruim\nfunction calc($a, $b) {\n    return $a + $b * 1.2;\n}\n\n// Bom\nfunction calculateTotalWithTax(float $price, float $taxRate = 0.2): float {\n    return $price * (1 + $taxRate);\n}
\n\n

Princípio da Responsabilidade Única (SRP) em classes

\n

Um dos princípios SOLID afirma: "Uma classe deve ter apenas um motivo para mudar". Isso significa que cada classe deve ser responsável por uma tarefa específica.

\n\n

Violação do SRP

\n
<?php\nclass OrderProcessor {\n    public function process(Order $order) {\n        // Validação do pedido\n        if (empty($order->items)) {\n            throw new Exception("Pedido vazio");\n        }\n        \n        // Salvar no banco de dados\n        $this->saveToDatabase($order);\n        \n        // Enviar email\n        mail($order->email, "Pedido confirmado", "Obrigado pela compra!");\n        \n        // Gerar fatura em PDF\n        $this->generateInvoice($order);\n    }\n}
\n\n

Implementação limpa com SRP

\n
<?php\nclass OrderValidator {\n    public function validate(Order $order): void {\n        if (empty($order->items)) {\n            throw new Exception("Pedido vazio");\n        }\n    }\n}\n\nclass OrderRepository {\n    public function save(Order $order): void {\n        // Lógica de salvar no banco de dados\n    }\n}\n\nclass EmailNotifier {\n    public function sendOrderConfirmation(Order $order): void {\n        mail($order->email, "Pedido confirmado", "Obrigado pela compra!");\n    }\n}\n\nclass InvoiceGenerator {\n    public function generate(Order $order): string {\n        // Geração de PDF\n        return "invoice_".$order->id.".pdf";\n    }\n}\n\n// Uso\nclass OrderProcessor {\n    public function __construct(\n        private OrderValidator $validator,\n        private OrderRepository $repository,\n        private EmailNotifier $notifier,\n        private InvoiceGenerator $invoiceGenerator\n    ) {}\n    \n    public function process(Order $order): void {\n        $this->validator->validate($order);\n        $this->repository->save($order);\n        $this->notifier->sendOrderConfirmation($order);\n        $this->invoiceGenerator->generate($order);\n    }\n}
\n\n

Agora cada classe é responsável por sua área de responsabilidade, o que simplifica os testes e a manutenção.

\n\n

Evitando "números mágicos" e duplicação

\n

Blogs

Book Recommendations