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.