Programación funcional en PHP: fundamentos y 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

Programación funcional en PHP: de la teoría a la práctica



PHP se asocia tradicionalmente con enfoques imperativos y orientados a objetos, sin embargo, el lenguaje moderno proporciona herramientas potentes para la programación funcional (FP). En este artículo, analizaremos cómo aplicar los principios de FP en PHP: desde funciones anónimas hasta currying e inmutabilidad. Aprenderá cómo hacer que el código sea más predecible, comprobable y conciso.



1. Fundamentos: funciones anónimas y closures



Las funciones anónimas (lambdas) son la piedra angular de FP en PHP. Permiten pasar comportamiento como datos.



<?php// Función anónima simple$greet = function($name) {    return "¡Hola, $name!";};echo $greet('Mundo'); // ¡Hola, Mundo!

// Uso con array_map$numbers = [1, 2, 3, 4, 5];$squared = array_map(function($n) { return $n * $n;}, $numbers);print_r($squared); // [1, 4, 9, 16, 25]?>


Closures son funciones anónimas que capturan variables del ámbito externo usando la palabra clave use:



<?php$factor = 3;$multiply = function($n) use ($factor) {    return $n * $factor;};echo $multiply(5); // 15

// Closure con variable mutable (por referencia)$counter = 0;$increment = function() use (&$counter) { $counter++;};$increment();echo $counter; // 1?>


Los closures son indispensables al crear funciones callback y fábricas.



2. Funciones de orden superior: array_map, array_filter, array_reduce



PHP incluye funciones clásicas de orden superior que aceptan otras funciones como argumentos:



  • array_map — transforma cada elemento de un array;
  • array_filter — filtra elementos según una condición;
  • array_reduce — reduce un array a un solo valor.


<?php$data = [1, 2, 3, 4, 5, 6];

// Filtrar números pares$even = array_filter($data, function($n) { return $n % 2 === 0;}); // [2, 4, 6]

// Duplicar cada elemento$doubled = array_map(function($n) { return $n * 2;}, $even); // [4, 8, 12]

// Suma de todos los valores$sum = array_reduce($doubled, function($carry, $n) { return $carry + $n;}, 0); // 24?>


Tenga en cuenta: array_filter conserva las claves. Si necesita reindexar, use array_values().



3. Inmutabilidad y trabajo con datos



La programación funcional fomenta la inmutabilidad — la invariabilidad de los datos. En lugar de modificar objetos existentes, se crean nuevos.



<?php// Enfoque imperativo (mutación)$user = ['name' => 'Iván', 'age' => 25];$user['age'] = 26; // modificamos el array original

// Enfoque funcional (inmutable)$user = ['name' => 'Iván', 'age' => 25];$updatedUser = array_merge($user, ['age' => 26]); // nuevo array?>


Para trabajar con arrays, use array_merge, array_slice y el operador spread (PHP 7.4+):



<?php$original = [1, 2, 3];$new = [...$original, 4]; // [1, 2, 3, 4] — el original no cambió?>


La inmutabilidad simplifica la depuración y hace que el código sea seguro para subprocesos.



4. Currying y aplicación parcial



Currying — transformar una función de varios argumentos en una secuencia de funciones de un solo argumento. Aplicación parcial — fijar parte de los argumentos.



PHP no tiene currying incorporado, pero es fácil de implementar:



<?php// Función de suma currificadafunction curryAdd($a) {    return function($b) use ($a) {        return function($c) use ($a, $b) {            return $a + $b + $c;        };    };}

$add5 = curryAdd(5);

Blogs

Book Recommendations