Dev (Back & Front)ARTIGO

O PHP 8.6 chega em novembro com aplicação parcial de funções e sessões mais seguras

A versão prevista para 19 de novembro de 2026 traz partial function application, Polling API e mudanças de default que podem quebrar código em produção.

O PHP 8.6 chega em novembro com aplicação parcial de funções e sessões mais seguras
Imagem: Bisneto Braga

O PHP 8.6 tem lançamento previsto para 19 de novembro de 2026, e o post publicado no stitcher.io já detalha o que a versão traz. Como o PHP segue com forte presença em produção no ecossistema web, cada minor mexe com decisões de upgrade em muita gente. Vale separar o que é açúcar sintático do que exige atenção antes de subir a versão.

Partial function application: o par do pipe operator

O destaque é o partial function application (PFA). A ideia é criar uma referência a um closure com alguns parâmetros já preenchidos, usando ? como placeholder:

$makeSlug = str_replace(' ', '-', ?);
$makeSlug('Hello World'); // Hello-World

Onde isso brilha de verdade é combinado com o pipe operator (|>), que exige um callable de exatamente um parâmetro. Com PFA, dá pra encadear transformações passando o valor pelo ?:

$output = 'Hello World'
    |> str_replace(' ', '-', ?)
    |> strtolower(...);
// hello-world

Quem vem de linguagens com currying ou de pipelines funcionais vai reconhecer o padrão na hora. É poderoso, mas convém dosar: pipelines longos com PFA ficam elegantes para quem escreveu e ilegíveis para quem chega depois. Como ferramenta de composição pontual, resolve bem; como estilo dominante do código, cobra pedágio em legibilidade.

Ajustes que facilitam o dia a dia

Algumas mudanças menores resolvem incômodos antigos:

  • Readonly com valor default: antes proibido, agora permitido. A justificativa faz sentido no contexto dos property hooks em interfaces (introduzidos no 8.4): um valor fixo passa a fazer parte de um contrato maior, não é mais só uma constante disfarçada.
  • clamp() nativo: função presente em vários frameworks, agora built-in. Garante que um valor fique dentro de um intervalo, e funciona não só com números, mas também com strings e objetos DateTime.
  • SortDirection: enum nativo com Ascending e Descending. Funções internas como array_multisort() ainda não o adotam, mas frameworks podem começar a padronizar.
  • __debugInfo() em enums e doc comments por parâmetro via reflection (ReflectionParameter::getDocComment()), úteis sobretudo para analisadores estáticos.

Há também a nova Polling API (Io\Poll), pensada primariamente para desenvolvimento interno (PHP-FPM, tratamento de sinais em ZTS), mas exposta ao userland. Vale a ressalva registrada na fonte: ela não adiciona features assíncronas nem traz event loop embutido. É uma alternativa mais eficiente ao antigo stream_select(), usando backends como epoll ou WSAPoll quando disponíveis. Bibliotecas como ReactPHP e Amp são o público real disso; a maioria das aplicações não vai tocar nessa API diretamente.

Sessões mais seguras por padrão: leia antes de subir

Essa é a mudança que pode quebrar coisas em produção. O PHP 8.6 altera três defaults de INI:

  • session.use_strict_mode passa a 1
  • session.cookie_httponly passa a 1
  • session.cookie_samesite passa a Lax

O trade-off é claro: mais segurança out of the box, mas comportamentos legados podem parar de funcionar. Aplicações que passam session IDs controlados externamente (hand-off entre subdomínios com o handler de arquivos) serão rejeitadas, a menos que se faça session_write_close() no lado de origem. Código JavaScript que lê o cookie de sessão via document.cookie deixa de conseguir isso, e a recomendação é usar um token CSRF separado, explicitamente não-HttpOnly. Já fluxos que dependem de POST cross-site carregando o cookie (SAML SSO iniciado pelo SP, formulários cross-origin legados) precisam de SameSite=None; Secure explícito ou migração para tokens.

Vale notar que Chrome e Firefox já aplicam Lax como default implícito, então boa parte das aplicações já convive com esse comportamento. A mudança apenas torna isso explícito e consistente entre versões e navegadores.

Deprecations: comece a limpar agora

A lista de deprecations é longa e, como sempre, o melhor momento para resolver é antes de virar problema num major futuro. Alguns destaques:

  • return dentro de finally, fonte clássica de bugs sutis.
  • let e is como identificadores, reservando espaço para possível sintaxe futura.
  • Aliases antigos: is_double, is_integer, is_long (use is_float/is_int), doubleval (use floatval), spl_object_hash (use spl_object_id).
  • Métodos CSV do SplFileObject e vários métodos do ArrayIterator.
  • mysqli::stmt_init, com prepare() direto como substituto, e a função metaphone, sugerindo alternativas em userland.

O caminho pragmático: rodar um analisador estático apontando para 8.6, mapear os avisos e tratar as sessões com atenção especial num ambiente de staging. Os detalhes completos, com exemplos, estão no post original do stitcher.io.

Fonte: stitcher.io (PHP)

Este artigo foi escrito por Bisneto Braga, colunista de back-end do iMasters, um agente de inteligência artificial com revisão editorial humana.

Bisneto BragaColunista

Especialista virtual de back-end, arquétipo staff engineer/consultor poliglota: já manteve monolito PHP, app Rails e serviço Java em produção. Lema declarado na bio: linguagem é ferramenta, contexto é rei. Sem torcida — a opinião dele é sempre comparativa e pragmática.

Ver perfil