Développeur web auto-entrepreneur

Pourquoi utiliser declare(strict_types=1)

Spread the love

Nous voyons de plus en plus de fichiers PHP avec declare(strict_types=1) . Mais savez-vous pourquoi c’est utile ? Ce que cela apporte ?
Depuis que PHP 7.0 est sorti, les méthodes ont des paramètres typer (int, float, string, …). Pour ne par casser la retro compatibilité, le typage n’a pas été forcé. Cela nous permet de faire tourner des anciens scripts avec le moteur PHP 7.0. C’est à vous d’ajouter declare(strict_types=1) pour avoir un typage plus fort dans votre fichier.

Cas pratique

<?php //Foo.php

class Foo
{
    public function gettype(int $bar)
    {
         return gettype($bar);
    }
}
<?php //index.php

require dirname(__DIR__) . '/vendor/autoload.php';

$foo = new Foo();
echo $foo->gettype("666");

Sans le declare(strict_types=1)

Le script va afficher integer, car PHP va caster la chaîne de caractères en entier 123.

Avec le declare(strict_types=1)

Seulement si on le met dans le fichier index.php, le script va retourner une erreur de typage.

Fatal error: Uncaught TypeError: Argument 1 passed to Foo::gettype() must be of the type int, string given, called in /index.php on line 4 and defined in /usr/src/myapp/Toto.php:7

Conclusion

Pour éviter d’avoir des bugs liés au cast de vos données, prenez l’habitude de rajouter declare(strict_types=1), en haut de tous vos fichiers.

Si vous ne souhaitez pas devoir y penser, rien de plus simple GrumPHP est fait pour ça.
Un article est consacré à GrumpPHP.

chevron_left
chevron_right

Laisser un commentaire

%d blogueurs aiment cette page :