L'attribut NoDiscard

(PHP 8 >= 8.5.0)

Introduction

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 $_.

Synopsis de la classe

#[\Attribute]
final class NoDiscard {
/* Propriétés */
public readonly ?string $message;
/* Méthodes */
public function __construct(?string $message = null)
}

Propriétés

message
Un message optionnel expliquant pourquoi la valeur de retour ne doit pas ĂȘtre ignorĂ©e.

Exemples

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();

?>

Sommaire

add a note

User Contributed Notes

There are no user contributed notes for this page.