HOME ARQUIVO LIVRO DE VISITAS SITE NORMAL
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 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.
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.
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.
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.
#[\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.#[\Override] funciona em propriedades, por isso o motor avisa-te quando renomeias algo na classe pai e te esqueces da filha.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.
[ « 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 » ]
*** *** *** ***
Estás a ser o visitante número: 000314 [ Actualizar ]
🎵 A tocar agora: eyes_on_me.mid |||| (toca sozinho quando abres o site!)