PHP7 et Type Hinting

Le type hinting, c'est quoi ?
Le type hinting consiste à permettre le typage d'arguments dans un langage normalement non typé.
Concrètement, cela signifie que nous pouvons nous assurer que les arguments d'une fonctions seront d'un type particulier.
Le type hinting a principalement deux avantages : il permet d'auto-documenter le code et il réduit les risques de bug en limitant les comportements imprévus.
Comment ça fonctionne
En PHP, il est possible de faire du type hinting sur les fonctions.
Spécifiquement, il est possible de définir un type pour des arguments, ainsi qu'un type pour le retour de la fonction.
Il est possible de définir un type scalaire (string, float, int, bool), mais aussi des types plus complexes (array, object, instance d'une classe, etc.).
Déclarer un type pour un argument
Pour déclarer un type pour un argument, il suffit d'écrire le type avant l'argument.
Ex, pour une fonction is_square qui attend deux entiers :
<?php
function is_square (int $width, int $height)
{
if ($width == $height)
{
return true;
}
return false;
}Déclarer un type pour un retour de fonction
Pour déclarer un type pour un argument, il suffit d'écrire : type_voulu après le nom de la fonction
Ex, pour une fonction is_square qui retourne un bool :
<?php
function is_square (int $width, int $height) : bool
{
if ($width == $height)
{
return true;
}
return false;
}Ajouter un nullable
Pour certains arguments, notamment ceux qui doivent être optionnel, on peut parfois souhaiter définir un type, par exemple int, mais permettre à l'argument de prendre une valeur par défaut null.
Ex, si on veut que is_square puisse prendre 4 cotés.
<?php
function is_square (int $width, int $height, ?int $width2 = null, ?int $height2 = null) : bool
{
if ($width2 !== null || $height2 !== null)
{
if ($width2 != $width || $height2 != $height)
{
return false;
}
}
if ($width == $height)
{
return true;
}
return false;
}Pour cela, il suffit de rajouter un ? avant le type.
On peut faire la même chose pour le retour de la fonction.
Conséquences d'une déclaration de type
Le fait de déclarer un type pour un argument peut avoir deux conséquences différentes en PHP.
Par défaut, si on passe un argument d'un type différent de celui attendu, il sera casté.
<?php
function show_type ($v) { echo gettype($v); }
function show_type_i (int $v) { echo gettype($v); }
show_type('10'); //show string
show_type_i('10'); //show integerMais si on active le typage strict, une erreur fatale sera levée.
Pour cela, on utilise la méthode declare avec strict_types.
<?php
declare(strict_types = 1);
function show_type ($v) { echo gettype($v); }
function show_type_i (int $v) { echo gettype($v); }
show_type('10'); //show string
show_type_i('10'); //lève une erreur TypeErrorType hinting
By plebweb
Type hinting
- 438