Introducción: por qué el code review no es sobre control, sino sobre crecimiento
\n\nEl code review (revisión de código) en PHP no es un procedimiento arcaico de control del jefe sobre el subordinado. Es un diálogo profesional entre desarrolladores, orientado a mejorar la calidad del código, difundir el conocimiento dentro del equipo y prevenir errores en etapas tempranas. Sin embargo, como muestra la práctica, muchos desarrolladores PHP (especialmente al inicio) o temen la revisión o la convierten en una formalidad vacía.
\n\nEn este artículo, analizaremos en qué fijarse concretamente durante un code review de código PHP, cómo formular observaciones para no ofender a un colega y cómo sacar el máximo provecho de este proceso. El material se basa en la experiencia real de trabajo con proyectos en PHP 7.4+ y frameworks como Laravel y Symfony.
\n\n1. Qué revisar en el código PHP: lista de verificación práctica
\n\nNo existe una lista universal, pero para proyectos PHP se pueden destacar 5 áreas clave que definitivamente deben pasar por el filtro de la revisión.
\n\n1.1. Seguridad (Security)
\nPHP es un lenguaje donde es fácil cometer una vulnerabilidad. Lo primero que revisamos:
\n- \n
- Inyección SQL: ¿se utilizan consultas preparadas (PDO / prepared statements) en lugar de concatenación de cadenas? \n
- XSS (Cross-Site Scripting): ¿se escapa la salida mediante
htmlspecialchars()o motores de plantillas (Blade, Twig)? \n - Protección CSRF: ¿hay tokens en los formularios que modifican el estado? \n
- Validación de entrada: ¿se verifica el tipo y la longitud de los datos en el lado del servidor? \n
// Malo: concatenación en SQL\n$query = "SELECT * FROM users WHERE id = " . $_GET['id'];\n\n// Bueno: consulta preparada con PDO\n$stmt = $pdo->prepare('SELECT * FROM users WHERE id = :id');\n$stmt->execute(['id' => $_GET['id']]);\n\n\n1.2. Arquitectura y SOLID
\nIncluso si el proyecto no es empresarial, se deben cumplir los principios básicos:
\n- \n
- Responsabilidad única: ¿la clase/método no hace demasiado? \n
- Inversión de dependencias: ¿el código usa interfaces en lugar de clases concretas? \n
- Ausencia de objetos divinos: ¿no hay clases de más de 1000 líneas? \n
1.3. Estilo y estándares PSR
\nPara PHP esto es crítico. Verificamos el cumplimiento de PSR-12 (estilo de codificación):
\n- \n
- Sangría: 4 espacios, no tabulaciones. \n
- Llaves en nueva línea para clases y métodos. \n
- Nomenclatura correcta:
camelCasepara métodos,snake_casepara variables (a menos que se haya acordado otra cosa en el proyecto). \n
1.4. Rendimiento
\nEn PHP es fácil escribir código lento. Buscamos:
\n- \n
- Consultas en bucle (problema N+1) — en su lugar, use carga ansiosa (Eager Loading) en el ORM. \n
- Ignorar la caché: cálculos repetidos de los mismos datos. \n
- Funciones ineficientes: por ejemplo,
in_array()en un array grande es mejor reemplazarlo porisset($hash[$key]). \n
// Malo: consulta en bucle\nforeach ($users as $user) {\n $posts = DB::table('posts')->where('user_id', $user->id)->get();\n}\n\n// Bueno: una sola consulta con carga ansiosa\n$users = User::with('posts')->get();\n\n\n1.5. Manejo de errores y tipado
\n- \n
- ¿Hay strict_types al inicio del archivo? \n
- ¿Se utilizan tipos para los argumentos y valores de retorno? \n
- ¿Se manejan las excepciones, en lugar de silenciarlas con un
try-catchvacío? \n
2. Cómo dar retroalimentación: de "esto está mal" a "mejoremos esto"
\n\nLa habilidad más difícil en el code review no es encontrar un error, sino presentarlo correctamente. Una mala retroalimentación mata la motivación. Una buena enseña y une al equipo.
\n\n2.1. La regla del "Sándwich"
\nRelleno