Programação Funcional em PHP: do básico à prática

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

Programação Funcional em PHP: uma abordagem moderna para escrever código

O PHP é tradicionalmente associado aos estilos de programação imperativa e orientada a objetos. No entanto, com o lançamento das versões 7.4, 8.0 e 8.1, a linguagem ganhou ferramentas poderosas para programação funcional (FP). Essa abordagem paradigmática permite escrever código mais previsível, testável e conciso, especialmente ao trabalhar com arrays, coleções e tarefas assíncronas. Neste artigo, vamos explorar os conceitos-chave de FP em PHP e mostrar como aplicá-los na prática.



1. Fundamentos da Programação Funcional em PHP

A programação funcional é construída sobre vários princípios fundamentais:

  • Funções puras — o resultado depende apenas dos argumentos, sem efeitos colaterais.
  • Imutabilidade — os dados não são alterados, mas sim criadas novas cópias.
  • Funções de ordem superior — funções que recebem outras funções como argumentos ou as retornam.
  • Recursão — substituição de loops por auto-chamada de função.

O PHP suporta esses conceitos graças às funções anônimas (closures), arrow functions (desde o PHP 7.4) e funções nativas para manipulação de arrays.



// Exemplo de função purafunction add(int $a, int $b): int {    return $a + $b;}

// Exemplo de função anônima (closure)$multiply = function(int $x, int $y): int { return $x * $y;};

echo $multiply(3, 4); // 12

Importante: Funções puras em PHP não devem modificar variáveis globais ou realizar entrada/saída (ex.: echo). Isso garante previsibilidade e facilita a depuração.



2. Funções Anônimas, Closures e Arrow Functions

Funções anônimas (closures) são funções sem nome que podem ser passadas como argumentos ou atribuídas a variáveis. Elas podem capturar variáveis do escopo externo usando a palavra-chave use.



$factor = 2;$double = function(int $value) use ($factor): int {    return $value * $factor;};

echo $double(5); // 10

Com o PHP 7.4, surgiram as arrow functions — uma sintaxe mais concisa para closures de uma única linha. Elas capturam automaticamente variáveis do escopo.



$factor = 2;$double = fn(int $value): int => $value * $factor;

echo $double(5); // 10

Quando usar: Arrow functions são ideais para transformações simples (ex.: em array_map), enquanto closures clássicas são melhores para lógica complexa com múltiplas instruções.



3. Funções de Ordem Superior: map, filter, reduce

No PHP, para trabalhar com arrays de forma funcional, usamos funções nativas:

  • array_map() — aplica uma função a cada elemento do array.
  • array_filter() — filtra o array com base em uma condição.
  • array_reduce() — reduz o array a um único valor.


$numbers = [1, 2, 3, 4, 5, 6];

// map: dobrar cada elemento$doubled = array_map(fn($n) => $n * 2, $numbers);print_r($doubled); // [2, 4, 6, 8, 10, 12]

// filter: manter apenas os pares$even = array_filter($numbers, fn($n) => $n % 2 === 0);print_r(array_values($even)); // [2, 4, 6]

// reduce: soma de todos os elementos$sum = array_reduce($numbers, fn($carry, $n) => $carry + $n, 0);echo $sum; // 21

Dica: Use array_values() após array_filter() para redefinir as chaves do array, caso contrário elas podem ficar não sequenciais.



Essas funções permitem substituir loops foreach por cadeias de chamadas declarativas, tornando o código mais legível e menos propenso a erros.

Blogs

Book Recommendations