php 8.5
#[NoDiscard]
Attribute
( les nouveautés... )
Le nouvel attribut natif #[NoDiscard] indique que
la valeur de retour d’une fonction ou d’une
méthode ne doit pas être ignorée. Autrement dit,
si une fonction est marquée avec #[NoDiscard]
mais qu’elle est appelée sans utiliser son résultat,
alors un warning sera lancé à l’exécution.
C’est un mécanisme de sécurité logique
et de qualité de code.
Bug silencieux ?
L’appel à slugify() est bien réalisé
sans effet de bord et
le remplacement est effectué,
mais le résultat est perdu.
Au mieux, on peut imaginer que c’est
du code inutile ou mort,
mais il est plus probable que
ce soit un oubli, et donc un bug…
Un warning en PHP 8.5
L’appel provoque un warning
si on ajoute #[NoDiscard] à la fonction,
ce qui permet de détecter l’oublie.
OK si utilisé
La plupart des éditeurs mettent déjà en
œuvre ce mécanisme.
Il sera désormais inclus dans PHP.
Le fait de marquer la fonction est une
indication importante dans le code car elle
attire l’attention du lecteur/contributeur.
Pour forcer ?
Il suffit de caster en (void) pour ignorer.
Mais ce n’est pas spécialement élégant.
Bonne idée, de forcer ?
pas certain...
Références
RFC
👉 https://wiki.php.net/rfc/marking_return_value_as_important
Qui suis-je ?
Thierry Leriche
Architecte - développeur - concepteur
rédacteur - professeur
Linked’in
👉 https://www.linkedin.com/in/thierryler

NoDiscard Attribute - la nouveauté de PHP 8.5

  • 1.
  • 2.
    Le nouvel attributnatif #[NoDiscard] indique que la valeur de retour d’une fonction ou d’une méthode ne doit pas être ignorée. Autrement dit, si une fonction est marquée avec #[NoDiscard] mais qu’elle est appelée sans utiliser son résultat, alors un warning sera lancé à l’exécution. C’est un mécanisme de sécurité logique et de qualité de code.
  • 3.
    Bug silencieux ? L’appelà slugify() est bien réalisé sans effet de bord et le remplacement est effectué, mais le résultat est perdu. Au mieux, on peut imaginer que c’est du code inutile ou mort, mais il est plus probable que ce soit un oubli, et donc un bug…
  • 4.
    Un warning enPHP 8.5 L’appel provoque un warning si on ajoute #[NoDiscard] à la fonction, ce qui permet de détecter l’oublie. OK si utilisé
  • 5.
    La plupart deséditeurs mettent déjà en œuvre ce mécanisme. Il sera désormais inclus dans PHP. Le fait de marquer la fonction est une indication importante dans le code car elle attire l’attention du lecteur/contributeur.
  • 6.
    Pour forcer ? Ilsuffit de caster en (void) pour ignorer. Mais ce n’est pas spécialement élégant. Bonne idée, de forcer ? pas certain...
  • 7.
  • 8.
    Qui suis-je ? ThierryLeriche Architecte - développeur - concepteur rédacteur - professeur Linked’in 👉 https://www.linkedin.com/in/thierryler