Como docente y desarrollador, sé que escribir código limpio y eficiente es fundamental para cualquier programador. PHP, siendo uno de los lenguajes más populares para el desarrollo web, ofrece una amplia gama de funcionalidades, y con la llegada de PHP 8, surgen nuevas características que deben aprovecharse de manera óptima.
En este artículo voy a destacar las características principales que debemos tener en cuenta al ahora de escribir código limpio y llevar adelante buenas prácticas en PHP.
Código legible
El código debe ser fácil de leer y comprender, no solo para nosotros, sino también para otros programadores que puedan trabajar en el proyecto. Si el código es confuso o difícil de seguir, será más propenso a errores y más difícil de mantener.
A continuación veremos un listado de 3 claves para mejorar la legibilidad de nuestro código:
- Nombres de variables descriptivos: en lugar de usar
$x
, usa$cantidadDeProductos
. - Funciones cortas y claras: cada función debe realizar una sola tarea. Si una función tiene más de 30 líneas, podemos considerar en dividirla. Esto no es una regla exacta, pero si algo que debemos tener presente y contemplar.
- Comentarios cuando son necesarios: no debemos abusar de los comentarios. Recomendación: comentar solo cuando el código no se explique por sí mismo.
Veamos un ejemplo de código que siga estas recomendaciones:
// Código menos legible $x = get_p(); $r = $x * 0.2; // Código legible $precioProducto = obtenerPrecioProducto(); $impuesto = $precioProducto * 0.2;
Tipado estricto (Strict Typing)
En PHP 7 y PHP 8, se introdujo el tipado, lo que permite especificar el tipo de dato que espera una función o método. Esto te ayuda a evitar errores de tipo de datos y hace que el código sea más robusto y fácil de mantener.
Ventajas del tipado estricto:
- Mayor seguridad en el código. Reduce la posibilidad de errores relacionados con tipos incorrectos.
- Mejora la legibilidad. Los desarrolladores saben exactamente qué tipos de datos se manejan.
Implementación:
Es posible activar el modo de tipado estricto al inicio de tus archivos PHP:
declare(strict_types=1); function calcularTotal(float $precio, int $cantidad): float { return $precio * $cantidad; }
Novedad en PHP 8: Union Types
En PHP 8, podemos definir varios tipos de datos para una variable usando los union types. Esto es útil cuando una función puede aceptar o devolver diferentes tipos de datos.
function obtenerDato(int|string $dato) { return $dato; }
Evitar repeticiones de código
Es importante evitar repetir código en diferentes lugares. Si encontramos que estamos escribiendo el mismo bloque de código más de una vez, es una señal de que debemos abstraerlo en una función o clase reutilizable.
¿Un ejemplo de esto? Analicemos el caso de una validación. En lugar de escribir la misma lógica de validación en múltiples archivos, podemos crear una clase de validación centralizada:
class Validador { public static function esCorreoValido(string $correo): bool { return filter_var($correo, FILTER_VALIDATE_EMAIL) !== false; } }
Ahora podemos usar Validador::esCorreoValido($email)
en cualquier parte de la aplicación.
Los Namespaces adecuados
Los Namespaces ayudan a organizar el código y evitar conflictos entre clases o funciones que puedan tener el mismo nombre. Especialmente en proyectos grandes, los namespaces son esenciales para mantener el código estructurado.
Ejemplo de código:
namespace MiAplicacion\Modelos; class Producto { // Código de la clase Producto } namespace MiAplicacion\Controladores; use MiAplicacion\Modelos\Producto; class ControladorProducto { // Uso de la clase Producto en un controlador }
Manejo eficiente de excepciones
Manejar errores adecuadamente es crucial en cualquier aplicación. En lugar de depender de mensajes de error o códigos de retorno, usa excepciones para gestionar condiciones de error de manera más controlada y flexible.
Ejemplo de código donde usamos try
/catch
:
try { // Código que podría lanzar una excepción $resultado = realizarOperacionRiesgosa(); } catch (Exception $e) { // Manejo de la excepción echo "Se produjo un error: " . $e->getMessage(); }
Excepciones con nombre
PHP 8 permite excepciones con nombre específico, lo que hace que el manejo de errores sea aún más preciso.
Veamos el ejemplo, nuevamente con try
/catch
:
try { // Código } catch (MiExcepcion $e) { // Manejo específico de MiExcepcion }
Los constructores de objetos en PHP 8
PHP 8 introduce una nueva sintaxis más limpia para la inicialización de propiedades en clases. Anteriormente, era necesario definir las propiedades de una clase y luego asignarlas en el constructor. Ahora, con PHP 8, puedes hacerlo directamente en la definición del constructor.
Ejemplo en PHP 7:
class Persona { private $nombre; private $edad; public function __construct(string $nombre, int $edad) { $this->nombre = $nombre; $this->edad = $edad; } }
Ejemplo en PHP 8:
class Persona { public function __construct(private string $nombre, private int $edad) {} }
Esto reduce el código innecesario y mejora la legibilidad.
Pruebas Unitarias y Test-Driven Development
Es fundamental escribir pruebas unitarias para garantizar que cada parte de tu aplicación funcione como se espera. Herramientas como PHPUnit permiten crear y ejecutar pruebas automatizadas.
Principales beneficios:
- Detectar errores temprano:. Permiten encontrar errores antes de que lleguen a producción.
- Facilitar cambios futuros: Si hacemos modificaciones, las pruebas te alertarán si algo se rompe.
Ejemplo de código:
use PHPUnit\Framework\TestCase; class CalculadoraTest extends TestCase { public function testSuma() { $calculadora = new Calculadora(); $this->assertEquals(10, $calculadora->suma(5, 5)); } }
Buenas prácticas en PHP: en conclusión
Escribir código PHP de buena calidad no solo se trata de que funcione bien, también resulta fundamental que sea eficiente, legible y fácil de mantener. Con la llegada de PHP 8, las nuevas características como union types y las mejoras en el manejo de excepciones, facilitan la implementación de buenas prácticas.
Más información sobre como obtener la versión más reciente de PHP en https://www.php.net/.
Si te surgen dudas sobre este tema, o si te interesa compartir tu opinión déjame un comentario o escríbeme un mensaje.