PHP 8.5 introduz o operador pipe (|>)
(thephp.foundation)- O PHP 8.5 passa a incluir oficialmente o operador pipe (|>), permitindo encadeamento em estilo de programação funcional
- O operador pipe funciona como açúcar sintático (syntax sugar) ao passar o valor da esquerda como argumento da função (callable) da direita, permitindo escrever pipelines de transformação de dados complexos de forma concisa
- Códigos que antes exigiam chamadas aninhadas ou o uso excessivo de variáveis temporárias tornam-se expressões encadeadas com melhor legibilidade, aumentando significativamente a manutenibilidade e a reutilização
- Foi inspirado em recursos semelhantes de linguagens funcionais como F#, OCaml e Elixir, e após várias propostas e melhorias no próprio PHP, foi finalmente incluído oficialmente em 2025
- O operador pipe também deve se conectar de perto com futuras extensões do paradigma funcional, como Partial Function Application (aplicação parcial de função) e operador de composição de funções
- No PHP 8.5 (previsto para novembro de 2025), foi adicionado o operador pipe (|>), uma mudança pequena, mas de grande potencial, há muito solicitada pela comunidade
- A implementação é simples, mas a funcionalidade é avaliada como algo que eleva drasticamente a expressividade do código
O que é o operador pipe do PHP 8.5?
- O operador
|>é um operador simples que passa o valor da esquerda como argumento para a função da direita- Simplifica a entrada de parâmetros da função, funcionando como açúcar sintático (syntax sugar)
- Exemplo:
$result = "Hello World" |> strlen(...); // Esta linha tem o mesmo significado da abaixo $result = strlen("Hello World") - É possível encadear várias funções para escrever, linha a linha, pipelines de transformação de dados
$result = $arr |> fn($x) => array_column($x, 'tags') |> fn($x) => array_merge(...$x) |> array_unique(...) |> array_values(...); - No formato anterior, havia o inconveniente de precisar de chamadas altamente aninhadas ou declarar muitas variáveis temporárias
- Esse operador foi projetado de forma semelhante ao pipe (|) do shell Unix/Linux, o que aumenta sua intuição
Contexto de introdução e histórico
- É um conceito semelhante ao pipe de linguagens funcionais como F#, OCaml e Elixir
- Embora o PHP também já tenha várias bibliotecas com funcionalidade parecida, houve casos de perda de desempenho e problemas de complexidade
- Originou-se no Hack/HHVM (fork do PHP do Facebook), e no PHP várias RFCs foram rejeitadas após a primeira proposta em 2016
- Foi finalmente aprovado como sintaxe padrão em 2025, conectado a recursos já introduzidos antes, como First Class Callables (sintaxe de chamada de função de array)
Exemplos de uso e recursos
- Em processamento complexo de arrays, formatação de strings, processamento de fluxos de dados etc., é possível conectar funções de maneira intuitiva sem variáveis temporárias
- Também é possível usar cadeias em contextos que aceitam apenas uma única expressão, como match(), o que maximiza o aproveitamento do código
- À direita, além de chamadas de função, é possível usar diversos padrões, como Closure, retorno de função de alta ordem e outros
Reforço do paradigma funcional
- O pipe pode ser combinado com qualquer função, closure ou função de alta ordem
- Exemplo: encadeamento condicional (null-safe), Maybe Monad, processamento de stream etc., compatíveis de forma natural com vários padrões funcionais
- Com
maybe()e outras funções de alta ordem, também é possível implementar pipelines seguros paranull
Direções futuras
- A combinação com Partial Function Application (aplicação parcial de função) está prevista, permitindo combinações de função ainda mais diversas
- Um operador de composição de funções (composition operator) também está em proposta, e isso deve permitir otimizações para combinar cadeias múltiplas, como
map, de uma vez só
O operador pipe oferece uma inovação de produtividade, legibilidade e escalabilidade acima de uma simples adição sintática, e espera-se que a escrita de código no estilo de programação funcional no PHP após o 8.5 fique muito mais poderosa
Ainda não há comentários.