Clean Code en PHP: principios para escribir código limpio con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Qué es Clean Code y por qué es importante en PHP?



Clean Code (código limpio) no es solo un término de moda, sino una filosofía de desarrollo que ayuda a escribir programas comprensibles no solo para la máquina, sino también para las personas. En el contexto de PHP, donde el código a menudo es mantenido durante años por diferentes equipos, seguir los principios del código limpio se convierte en una habilidad críticamente importante.



El código limpio tiene varias características clave:

  • Es fácil de leer y entender sin comentarios
  • Es predecible y no causa "sorpresas" durante la ejecución
  • Es fácil de modificar sin riesgo de romper otras partes del sistema
  • Contiene un mínimo de duplicación (principio DRY)


En este artículo analizaremos los principios fundamentales de Clean Code con ejemplos concretos de código PHP.



1. Nombrado de variables y funciones



Ejemplo malo: ¿qué está mal con este código?

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

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

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


En este ejemplo, no está nada claro qué significan las variables $a, $b, $c y qué hace la función calc. En un mes, usted mismo no recordará por qué escribió este código.



Ejemplo bueno: nombres con significado

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

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

$finalPrice = calculatePriceWithTax($totalCost);


Reglas de nombrado en PHP:

  • Use sustantivos para variables ($userName, $orderTotal)
  • Use verbos para funciones (getUser(), calculateTotal())
  • No abrevie nombres (escriba $customerAddress, no $custAddr)
  • Evite variables de una sola letra (excepto contadores de bucles $i, $j)
  • Las variables booleanas comiencen con is, has, can ($isActive, $hasPermission)


2. Funciones pequeñas y principio de responsabilidad única (SRP)



Problema: la función navaja suiza

// ❌ Código malo: la función lo hace todo a la vezfunction processOrder(array $orderData): array {    // Validación    if (empty($orderData['email'])) {        throw new Exception('Email required');    }        // Guardar en 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']]);        // Enviar email    mail($orderData['email'], 'Order confirmed', 'Thank you!');        // Registro    file_put_contents('log.txt', 'Order processed: ' . date('Y-m-d H:i:s') . PHP_EOL, FILE_APPEND);        return ['status' => 'success'];}


Esta función viola el principio de responsabilidad única (Single Responsibility Principle). Se encarga de validación, trabajo con BD, envío de correo y registro. Cualquier cambio en uno de estos procesos requerirá modificar toda la función.



Solución: descomposición en funciones pequeñas

// ✅ Código bueno: cada función se encarga de una acciónfunction 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