Marcando valores de retorno como importantes (#[\NoDiscard]) no PHP 8.5

Marcos Marcolin • March 5, 2025

php php85 phprfc opensource

🐘💡 RFC: Atributo #[\NoDiscard] no PHP 8.5?!

Uma nova RFC em votação no PHP 8.5 propõe a adição do atributo #[\NoDiscard], que alerta quando o retorno de uma função ou método não é utilizado.

⚠️ O problema?

Ignorar retornos pode gerar falhas silenciosas e difíceis de detectar. Essa RFC busca tornar esse comportamento mais explícito e reduzir bugs, garantindo que retornos importantes sejam sempre verificados.

⚙️ Como funciona?

Se uma função for marcada com #[\NoDiscard], o PHP emitirá um warning caso o retorno seja ignorado. Caso o desenvolvedor queira descartar intencionalmente o retorno, será possível usar o (void) cast.

A RFC ainda está em votação, mas tem boas chances de ser aprovada.

E aí, você gostaria desse recurso?

Eu particularmente, sim, pois o uso é opcional. Tornar isso obrigatório seria uma loucura, que acredito nunca acontecer.

Exemplo prático

<?php

#[\NoDiscard("Verifique o retorno para garantir o processamento correto.")]
function processarItens(array $items): array 
{
    $resultados = [];

    foreach ($items as $item) {
        $resultados[] = random_int(0, 1);
    }

    return $resultados;
}

$items = ['foo', 'bar', 'baz'];

// ⚠️ Warning: The return value of function processarItens() is expected to be consumed, Verifique o retorno para garantir o processamento correto in %s on line %d
processarItens($items);

// ✅ Sem warning, pois o retorno foi utilizado
$resultados = processarItens($items);

// ✅ Sem warning, pois o retorno foi intencionalmente descartado
(void) processarItens($items);

Você pode ler mais sobre a proposta na publicação oficial: clique aqui.

O que você achou dessa novidade? Compartilhe suas ideias nos comentários!