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
6 comentários
Ainda assim, não uso.
Ótimo, hehe. Também sei que há uma discussão relacionada em andamento no Python, mas espero que uma funcionalidade semelhante seja adicionada também.
PHP 8.5 (previsão para novembro de 2024) -> PHP 8.5 (previsão para novembro de 2025)
PHP, uma linguagem amada e odiada, está se tornando uma linguagem que vale a pena revisitar novamente...!
Legal... que inveja...
Também inclua isso na ECMA~~~