update page now

El atributo NoDiscard

(PHP 8 >= 8.5.0)

Introducción

Este atributo se puede utilizar para indicar que el valor de retorno de una función o de un método no debe ser descartado. Si el valor de retorno no se utiliza de ninguna manera, se emitirá una advertencia.

Esto es útil para funciones en las que no comprobar el valor de retorno es probablemente un error.

Para descartar intencionalmente el valor de retorno de dicha función, utilice la conversión (void) para suprimir la advertencia.

Nota: Dado que los atributos están diseñados para ser retrocompatibles, #[\NoDiscard] se puede añadir a funciones y métodos incluso cuando se soportan PHP 8.4 o versiones anteriores, simplemente no hará nada. En PHP 8.5 y superiores se emitirá una advertencia si el resultado no se utiliza. Para suprimir la advertencia sin usar (void), que no es soportado antes de PHP 8.5, considere usar una variable como $_.

Sinopsis de la Clase

final class NoDiscard {
/* Propiedades */
public readonly ?string $message;
/* Métodos */
public __construct(?string $message = null)
}

Propiedades

message
Un mensaje opcional que explica por qué el valor de retorno no debe ser descartado.

Ejemplos

Ejemplo #1 Uso básico

<?php

/**
* Processes all the given items and returns an array with the results of the
* operation for each item. `null` indicates success and an Exception indicates
* an error. The keys of the result array match the keys of the $items array.
*
* @param array<string> $items
* @return array<null|Exception>
*/
#[\NoDiscard("as processing might fail for individual items")]
function
bulk_process(array $items): array {
$results = [];

foreach (
$items as $key => $item) {
if (
\random_int(0, 9999) < 9999) {
// Pretend to do something useful with $item,
// which will succeed in 99.99% of cases.
echo "Processing {$item}", PHP_EOL;
$error = null;
} else {
$error = new \Exception("Failed to process {$item}.");
}

$results[$key] = $error;
}

return
$results;
}

bulk_process($items);

?>

La salida del ejemplo anterior en PHP 8.5 es similar a:

Warning: The return value of function bulk_process() should either be used or intentionally ignored by casting it as (void), as processing might fail for individual items

Ejemplo #2 Descartar intencionalmente el valor de retorno

<?php

#[\NoDiscard]
function
some_command(): int {
return
1;
}

// Suprimir la advertencia usando (void) - PHP 8.5+
(void) some_command();

// Para compatibilidad con versiones de PHP anteriores a 8.5, usar una variable temporal
$_ = some_command();

?>

Ver también

Tabla de contenidos

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top