Clean Code em PHP: princípios de escrita de código limpo com exemplos

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

O que é Clean Code e por que é importante em PHP?



Clean Code (código limpo) não é apenas um termo da moda, mas uma filosofia de desenvolvimento que ajuda a escrever programas compreensíveis não apenas para a máquina, mas também para o ser humano. No contexto do PHP, onde o código é frequentemente mantido por anos por diferentes equipes, seguir os princípios do código limpo se torna uma habilidade criticamente importante.



O código limpo possui várias características-chave:

  • É fácil de ler e entender sem comentários
  • É previsível e não causa "surpresas" durante a execução
  • É fácil de modificar sem o risco de quebrar outras partes do sistema
  • Contém o mínimo de duplicação (princípio DRY)


Neste artigo, vamos analisar os princípios básicos do Clean Code com exemplos concretos de código PHP.



1. Nomenclatura de variáveis e funções



Exemplo ruim: o que há de errado com este código?

// ❌ Código ruim$a = 5;$b = 10;$c = $a * $b;

function calc($x, $y) { return $x + $y * 0.2;}

$d = calc($a, $b);


Neste exemplo, não está claro o que significam as variáveis $a, $b, $c e o que a função calc faz. Em um mês, você mesmo não se lembrará por que escreveu este código.



Exemplo bom: nomes significativos

// ✅ Código bom$productPrice = 5;$quantity = 10;$totalCost = $productPrice * $quantity;

function calculatePriceWithTax(float $basePrice, float $taxRate = 0.2): float { return $basePrice + ($basePrice * $taxRate);}

$finalPrice = calculatePriceWithTax($totalCost);


Regras de nomenclatura em PHP:

  • Use substantivos para variáveis ($userName, $orderTotal)
  • Use verbos para funções (getUser(), calculateTotal())
  • Não abrevie nomes (escreva $customerAddress, não $custAddr)
  • Evite variáveis de uma letra (exceto contadores de loop $i, $j)
  • Variáveis booleanas comece com is, has, can ($isActive, $hasPermission)


2. Funções pequenas e princípio da responsabilidade única (SRP)



Problema: função canivete suíço

// ❌ Código ruim: função faz tudo de uma vezfunction processOrder(array $orderData): array {    // Validação    if (empty($orderData['email'])) {        throw new Exception('Email required');    }        // Salvamento no BD    $pdo = new PDO('mysql:host=localhost;dbname=shop', 'root', '');    $stmt = $pdo->prepare("INSERT INTO orders (email, total) VALUES (?, ?)");    $stmt->execute([$orderData['email'], $orderData['total']]);        // Envio de email    mail($orderData['email'], 'Order confirmed', 'Thank you!');        // Logging    file_put_contents('log.txt', 'Order processed: ' . date('Y-m-d H:i:s') . PHP_EOL, FILE_APPEND);        return ['status' => 'success'];}


Esta função viola o princípio da responsabilidade única (Single Responsibility Principle). Ela lida com validação, trabalho com BD, envio de e-mail e logging. Qualquer alteração em um desses processos exigirá a modificação de toda a função.



Solução: decomposição em funções pequenas

// ✅ Código bom: cada função é responsável por uma açãofunction validateOrderData(array $orderData): void {    if (empty($orderData['email'])) {        throw new InvalidArgumentException('Email is required');    }}

function saveOrderToDatabase(array $orderData): int { $pdo = new PDO('mysql:host=localhost;dbname=shop', 'root', ''); $stmt = $pdo->prepare("INSERT INTO orders (email, total) VALUES (?, ?)"); $stmt->execute([$orderData['email'], $orderData['total']]); return (int)$pdo->lastInsertId();}

Blogs

Book Recommendations