2 pontos por GN⁺ 2025-11-21 | 1 comentários | Compartilhar no WhatsApp
  • O PHP 8.5 é uma grande atualização que inclui vários recursos, como operador pipe, clone with e novo parser de URI
  • O operador pipe simplifica cadeias de chamadas de função, melhorando a legibilidade e a manutenção
  • O recurso clone with permite alterar valores de propriedades ao mesmo tempo em que o objeto é clonado, com algumas restrições para propriedades readonly
  • Recursos voltados à conveniência do desenvolvedor, como #[NoDiscard], cast (void), suporte a expressões constantes com closures e exibição de backtrace em fatal errors, também foram reforçados
  • A versão inclui melhorias detalhadas em manipulação de arrays, validação de atributos e descontinuação de casts não padronizados, além de mudanças relacionadas à compatibilidade retroativa

Principais novos recursos

  • Introdução do operador pipe (|>), permitindo escrever código em cadeia que passa diretamente o resultado de uma função para a próxima

    • Suporta uma estrutura de transformação de dados em etapas, em vez de chamadas de função aninhadas
    • No código de exemplo, trim, str_replace e strtolower são conectados em sequência
  • O recurso clone with permite alterar valores de propriedades ao mesmo tempo em que o objeto é clonado

    • Na classe de exemplo Book, ele é usado no formato clone($this, ['title' => $title])
    • Porém, ao clonar propriedades readonly externamente, é necessário o modificador de acesso public(set)
  • Adição do atributo #[NoDiscard] e do cast (void)

    • É possível marcar funções que geram aviso quando o valor de retorno é ignorado
    • O cast (void) pode ser usado para suprimir esse aviso
  • Com as melhorias em closures, agora é possível usar closures e callables de primeira classe em expressões constantes

    • No exemplo, a definição aparece dentro de um atributo no formato #[SkipDiscovery(static function (...))]
    • Essas closures devem obrigatoriamente ser declaradas como static e não podem acessar variáveis externas
  • Adição da exibição de backtrace em fatal errors

    • Informações de rastreamento de pilha que antes não eram mostradas agora passam a ser incluídas na mensagem de erro, facilitando o debugging

Recursos relacionados a arrays e URI

  • Adição das funções array_first() e array_last()

    • Retornam de forma simples o primeiro e o último elemento de um array
    • Substituem a abordagem mais complexa baseada em array_key_first() e array_key_last()
  • Adição de um novo parser de URI

    • A classe Uri\Rfc3986\Uri fornece métodos como getHost(), getScheme() e getPort()
    • Simplifica a manipulação e a análise de URIs

Recursos relacionados a atributos e validação

  • Introdução do atributo #[DelayedTargetValidation]
    • Permite adiar o momento de validação de alguns atributos, como #[Override], do tempo de compilação para o tempo de execução
    • O objetivo é aliviar problemas de compatibilidade retroativa

Outras pequenas mudanças

  • Suporte a visibilidade assimétrica em propriedades estáticas
  • Agora é possível aplicar atributos também a constantes fora de classes
  • A property promotion do construtor agora também pode ser aplicada a propriedades final
  • O atributo #[\Override] agora também pode ser aplicado a propriedades
  • Adição da propriedade Dom\Element::$outerHTML
  • A extensão Exif passa a oferecer suporte a imagens HEIF/HEIC
  • Adição da flag FILTER_THROW_ON_FAILURE em chamadas de filter_var()

Descontinuações e mudanças incompatíveis

  • Descontinuação do uso de nomes de cast não padronizados como (boolean) e (integer)
  • Descontinuação do uso de crases (```) como alias de shell_exec()
  • Descontinuação do recurso de redeclaração de constantes
  • Remoção da configuração ini disabled_classes
  • A lista completa de mudanças e descontinuações pode ser consultada na documentação de upgrade do PHP 8.5

Resumo geral

  • O PHP 8.5 é uma versão que melhora a experiência geral de desenvolvimento em áreas como legibilidade de código, debugging, tratamento de atributos e manipulação de arrays
  • O operador pipe e o parser de URI têm impacto direto na simplificação do código em aplicações reais
  • Mudanças como adiamento da validação de atributos, novas funções de array e exibição de backtrace aumentam a manutenção e a estabilidade
  • Algumas sintaxes e configurações não padronizadas foram descontinuadas, exigindo ajustes no código
  • No geral, é uma release focada em reforçar a consistência da linguagem e melhorar a conveniência para desenvolvedores

1 comentários

 
GN⁺ 2025-11-21
Comentários do Hacker News
  • Eu ainda amo PHP
    Criei um software de criptografia para PHP há 23 anos e ele ainda funciona bem
    Ainda mantenho uma newsletter sobre PHP, e a comunidade continua forte
    Também uso Python e Node.js, mas para tarefas rápidas e simples sempre acabo voltando para PHP
    Ainda assim, o fato de a linguagem ter ficado muito mais complexa depois do PHP 5 parece uma faca de dois gumes

    • Acho que PHP é um caso exemplar de uma grande transição bem executada
      Enquanto Python passava do 2 para o 3, PHP evoluiu de 5.2→5.3 e 5.6→7.0
      Com namespaces, autoloading PSR0, melhorias no parser e outras mudanças, velocidade e estrutura melhoraram bastante
      A cada atualização, a linguagem foi evoluindo sem quebrar compatibilidade de forma brusca, oferecendo avisos e shims para manter versões antigas funcionando
      O cancelamento do PHP 6 aconteceu por causa de mudanças no tratamento de strings e, no fim das contas, foi uma decisão sensata
      Foi um projeto que respeitou a linguagem e a comunidade que sustentaram tanta gente por tanto tempo
    • Muita gente diz que PHP ficou complexo, mas um código simples que escrevi em 5.3 continua funcionando perfeitamente no PHP 8
      Dá para escrever de forma complexa, mas isso não é obrigatório
    • Fiquei curioso se esse software de criptografia era o Zend
      Mexi com ferramentas ligadas ao Zend em meados dos anos 2000, e lembro que eram bem complicadas
    • O PHP 8 é totalmente compreensível se for aprendido da forma certa desde o início
      Se você aprender PSR e levar em conta segurança e recursos, ele virou uma linguagem muito mais estável e poderosa
  • A evolução desde o PHP 5 é impressionante, mas junto veio também o problema do aumento de complexidade
    Para quem aprendeu nas versões antigas, codebases modernas podem parecer estranhas e difíceis de acompanhar
    Isso é uma força para a comunidade, mas vira uma barreira para desenvolvedores que estão voltando

    • Acho que o PHP moderno ainda é uma linguagem com ótima legibilidade
      Usei C++ por 10 anos, mas hoje PHP é muito mais fácil de ler do que código moderno em C++
    • Basta aprender PHP 8. O PHP de hoje está muito melhor do que era antes
    • Hoje em dia a maioria dos softwares sofre de problema parecido
      Parece que o objetivo de simplicidade desapareceu, e só vão empilhando funcionalidades
    • Na verdade isso também acontece com outras linguagens
      A área web muda especialmente rápido, então quem não acompanha fica para trás
    • Mesmo trabalhando como especialista em Java, muitas vezes preciso explicar recursos novos para colegas
      PHP é uma linguagem especialmente usada por iniciantes criando seu primeiro site, então a sensação de mudança pode ser maior do que em outras linguagens
  • Muita gente tende a ter vergonha de PHP, mas eu não
    Não conheço a linguagem a fundo, mas sei que há muitos projetos excelentes
    Meu projeto favorito em PHP hoje é o BookStack, que uso como wiki da família
    Ainda existem muitos sites feitos com uma stack PHP bem mantida

    • O PHP moderno é uma linguagem rápida e excelente
      Usei PHP em produção entre 2021 e 2023, e os problemas não estavam tanto na linguagem, mas em codebases antigas e salários baixos
      Há muito código legado da época do PHP 4, com padrões de acesso a dados inconsistentes, o que dificulta bastante a manutenção
      Mas, ao migrar para PHP 8, a qualidade do código melhorou muito
      Eu não escolheria PHP para começar um projeto novo, mas participaria com prazer de um projeto moderno em Laravel
    • PHP era uma linguagem intuitiva e agradável de usar
      Mas iniciantes conseguiam começar sem noções de segurança, então problemas como SQL injection eram comuns, e isso acabou dando à linguagem a fama de “insegura”
    • Prefiro um backend em PHP a JS/TS + frameworks modernos
      Com um framework como Laravel, é um ambiente muito mais estável e maduro
    • Construí minha carreira com PHP e ainda gosto do seu processo de modernização
      É como tocar guitarra ou escrever poesia: qualquer um pode fazer, mas fazer bem é difícil
    • Gosto do AzuraCast
      Aprendo olhando o código e gosto da experiência de hospedar meu próprio servidor de rádio/música
  • PHP se tornou uma linguagem cada vez mais complexa a cada atualização
    Continua sendo uma linguagem centrada na web, então fico em dúvida sobre por que ela evolui tanto assim

    • C# e Java também ficaram mais complexos por serem centrados em backend web
      No fim, parece que as linguagens orientadas a objetos tradicionais estão convergindo para uma direção parecida
    • A própria web já não é algo simples
    • Também existem projetos como NativePhp
      Mesmo sendo uma linguagem voltada para web, há muitos motivos para ela continuar evoluindo. Melhorar a experiência do desenvolvedor sempre vale a pena
    • No começo critiquei sem ler o texto, mas revendo agora, alguns recursos parecem bons
      array_first() e array_last() são úteis, mas o operador pipe pode prejudicar a manutenibilidade
      Como ele só suporta funções unárias, em funções mais complexas pode acabar introduzindo bugs
  • O ponto mais interessante do anúncio do PHP 8.5 é a estabilidade e maturidade da linguagem

  • Impressiona que o PHP vai adicionar array_first, array_last e fatal error stack trace antes de GTA6

    • São boas adições, mas na prática array_shift ou array_pop já davam conta
  • Continuar adicionando novas funções e sintaxe ao PHP aumenta o custo de manutenção no longo prazo
    Pelas notas oficiais de release, alguns recursos têm valor discutível

    • A extensão URI é mais rápida, mas se sobrepõe ao parse_url() existente
    • O operador pipe é questão de preferência e pode prejudicar a consistência do estilo de código
    • As melhorias em clone são mudanças pequenas
    • #Discard/void substitui recursos de analisadores estáticos
    • Closures em constantes são interessantes, mas podem levar a atributos complexos (#attribute)
    • Handles persistentes de cURL trazem ganho real de desempenho
    • array_first() é basicamente açúcar sintático e provavelmente quase não será usado em projetos grandes
  • Notas oficiais de release do PHP 8.5

  • Os exemplos do operador pipe em muitas linguagens apenas omitem a abordagem comum de usar variáveis temporárias
    O exemplo de parsing de URL também não foi comparado diretamente com parse_url()

    • parse_url() não segue totalmente o padrão e lida mal com URLs relativas
      A nova função uri() é mais limpa e, se adicionarem aplicação parcial de função, a cadeia com pipe ficará mais legível
  • Eu costumava usar **crases () no PHP CLI para chamar shell_exec()**, mas isso agora foi deprecated Usava muito coisas como mkdir $dirname`

    • Isso é um antipadrão de segurança
      Há risco de injeção de metacaracteres do shell, então o ideal é usar mkdir() ou pcntl_exec() do próprio PHP