(PHP 8 >= 8.5.0)
Cet attribut peut ĂȘtre utilisĂ© pour indiquer que la valeur de retour d'une fonction ou d'une mĂ©thode ne doit pas ĂȘtre ignorĂ©e. Si la valeur de retour n'est utilisĂ©e d'aucune maniĂšre, un avertissement sera Ă©mis.
Cela est utile pour les fonctions oĂč ne pas vĂ©rifier la valeur de retour est probablement un bogue.
Pour ignorer intentionnellement la valeur de retour d'une telle fonction, il est possible d'utiliser le cast (void) pour supprimer l'avertissement.
Note: Ătant donnĂ© que les attributs sont conçus pour ĂȘtre rĂ©trocompatibles,
#[\NoDiscard]peut ĂȘtre ajoutĂ© aux fonctions et mĂ©thodes mĂȘme lorsque PHP 8.4 ou infĂ©rieur est supportĂ©, il ne fera simplement rien. Sur PHP 8.5 et supĂ©rieur, un avertissement sera Ă©mis si le rĂ©sultat n'est pas utilisĂ©. Pour supprimer l'avertissement sans utiliser(void), qui n'est pas supportĂ© avant PHP 8.5, il est possible d'utiliser une variable comme$_.
Exemple #1 Utilisation basique
<?php
/**
* Traite tous les éléments donnés et retourne un tableau avec les résultats de
* l'opération pour chaque élément. `null` indique un succÚs et une Exception
* indique une erreur. Les clés du tableau de résultat correspondent aux clés du tableau $items.
*
* @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) {
// On prétend faire quelque chose d'utile avec $item,
// ce qui réussira dans 99,99% des cas.
echo "Processing {$item}", PHP_EOL;
$error = null;
} else {
$error = new \Exception("Failed to process {$item}.");
}
$results[$key] = $error;
}
return $results;
}
bulk_process($items);
?>La sortie de l'exemple ci-dessus en PHP 8.5 est similaire Ă :
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
Exemple #2 Ignorer intentionnellement la valeur de retour
<?php
#[\NoDiscard]
function some_command(): int {
return 1;
}
// Supprimer l'avertissement avec (void) - PHP 8.5+
(void) some_command();
// Pour la compatibilité avec les versions de PHP antérieures à 8.5, utiliser une variable temporaire
$_ = some_command();
?>