~ O Blog de 1999 ~

Faro, Portugal · WebMaster · PHP & MySQL · Blog de 1999
*** UMA ENTRADA DO MEU BLOG *** Deixa um recado no livro de visitas! ***

HOME ARQUIVO LIVRO DE VISITAS SITE NORMAL

Entrada do Blog

PHP 8.5 na prática: as funcionalidades que vais mesmo usar

PHP 8.5 na prática: as funcionalidades que vais mesmo usar

O que saiu de facto

O PHP 8.5 chegou em novembro de 2025 e, ao contrário de outras versões, é fácil olhar para a lista de novidades e perceber o que te vai mudar o dia e o que é para outra pessoa qualquer. Tenho-o a correr em projetos pequenos desde então. Estas são as quatro coisas que uso.

O operador pipe

O pipe pega no valor da esquerda e entrega-o como primeiro argumento da chamada da direita. Parece pouco. Não é, porque as transformações de texto são exatamente onde o código PHP fica feio.

$slug = strtolower(
    str_replace('.', '',
        str_replace(' ', '-', trim($title))
    )
);

O mesmo com pipes lê-se de cima para baixo, que é como tu pensas nisto na realidade:

$slug = $title
    |> trim(...)
    |> (fn($s) => str_replace(' ', '-', $s))
    |> (fn($s) => str_replace('.', '', $s))
    |> strtolower(...);

Uso-o em slugs, a normalizar input e a construir cache keys. Não em todo o lado. Uma cadeia de dois passos costuma ser pior do que estar aninhada.

clone() com novos valores

Se escreves value objects, isto tira-te uma pilha de boilerplate. Em vez de um withStatus() à mão para cada propriedade, a sintaxe de clone deixa-te mudar campos enquanto copias.

$draft  = new Article('Title', 'draft');
$review = clone $draft with { status: 'review' };

O original fica intacto. Em classes readonly, é a diferença entre escrever quatro métodos e não escrever nenhum.

array_first() e array_last()

Estas duas funções deviam existir há uma década. Devolvem o primeiro e o último elemento de um array, ou null quando está vazio, e aceitam um callable.

$latest = array_last($posts, fn($p) => $p->isPublished());

Antes disto escrevia $posts[array_key_first($posts)] ?? null. Já não preciso.

A que te vai valer às duas da manhã

Os erros fatais, incluindo um timeout, passam a trazer um backtrace. Só isso já justifica o upgrade num servidor de produção, porque um timeout antigamente dizia-te que o script morreu e mais nada. Agora diz-te onde é que ele estava quando morreu.

Os itens mais pequenos

  • #[\NoDiscard] escreve um aviso no log quando descartas um valor de retorno. Útil em funções que só existem para devolver algo, como um validador.
  • Os atributos podem ser aplicados a constantes e o #[\Override] funciona em propriedades, por isso o motor avisa-te quando renomeias algo na classe pai e te esqueces da filha.
  • Closures estáticas e callables de primeira classe são permitidos em expressões constantes, o que dá argumentos de atributo mais limpos.
  • O OPcache passa a vir dentro do binário em vez de ser uma extensão opcional. Menos surpresas no deploy.

Deves atualizar agora

Confirma primeiro as tuas dependências. Para mim o upgrade tem sido aborrecido, o que aqui é o elogio que se quer. Se estás em 8.3 ou 8.4 e o teu framework suporta 8.5, há pouca razão para esperar, e a melhoria do backtrace paga a tarde que custa.

Onde ir agora?

[ « Dicas de PHP que me poupam tempo todas as semanas ]   [ WordPress 7.0: o bug wp2shell que fez todos os alojamentos a enviar-te email » ]

[ arquivo do blog ]   [ página inicial ]

*** *** *** ***

Estás a ser o visitante número: 000314   [ Actualizar ]

🎵 A tocar agora: eyes_on_me.mid   ||||       (toca sozinho quando abres o site!)

Netscape NOW!Internet Explorer 4Melhor visto a 800×600 Melhor visto no Netscape 4.0Feito com NotepadHTML 3.2 válido!Sem cookies! (ainda não existiam)
~ Este site faz parte do anel WEBRING ALGARVE 1999 ~
[ << Site anterior ]   [ Aleatório ]   [ Site seguinte >> ]

[ voltar ao site normal ]