Article mis à jour le : 05-05-2022
Une petite introduction à PHP 7PHP 7 est sorti en fin d'année dernière, et somme toute, mis à part pour les fans du langage, il est passé relativement inaperçu ou presque. C'est donc l'occasion de faire un petit topo sur les nouveautés de cette version.
Avant de commencer, il faut savoir que le moteur de PHP a été complètement refait, et que la rapidité est le principal avantage de cette nouvelle version. Les chiffres montrent des performances jusqu'à 10 fois supérieures sur des tests réalisés avec Drupal 8 et Wordpress 4. Maintenant, parlons du code... J'ai pu essayer certains des éléments listés ci-dessous, et il faut reconnaître qu'ils amènent un vrai plus!
Le type hint consiste tout simplement à préciser le type de la donnée passée en paramètres dans une fonction. Jusqu'à PHP7, le language ne permettait que de le faire avec les objets ou les tableaux:
Cela était intéressant, et extrêmement flexible (c'était aussi une critique de certains détracteurs de ce langage) grâce au typage faible. Mais rassurez-vous, cela n'a pas changé. Néanmoins, on peut à présent le faire aussi pour les types scalaires:
<?php
function stringTest(string $string) {
echo "Voici votre chaîne: $stringn";
}
stringTest("Bonjour");
stringTest("5");
stringTest(5);
Avant PHP7, le langage aurait attendu un objet de type String. Ce n'est plus le cas, il attend bien un type primitif de type String. Cependant, vous remarquerez que le transtypage subsiste: on a fourni un entier, et il l'a bien affiché sans broncher. Là où cela devient intéressant, c'est que l'on peut activer un mode strict, qui va rendre votre code plus nécessiteux en termes de rigueur. Placez ceci au début du premier script de votre application:
declare(strict_types = 1);
Et relancez le script... Là il vous jette :-)
De la même façon, vous pouvez à présent préciser le type de la variable retournée:
public function additionne(int $a, int $b) : int { ... }
Si le strict mode n'est pas activé, vous pouvez passer des types similaires, ils seront convertis mais avec transformation. Par exemple ici:
additionne(4, 2) // retournera bien 6
additionne(4.5, 2.5) // retournera 6 : les paramètres sont transformés en entrée
Maintenant petite modification:
public function additionne(float $a, float $b) : int { ... }
additionne(4, 2) // retournera bien 6
additionne(4.5, 2.5) // retournera bien 7
Bon maintenant, activons le mode strict, et recommençons:
additionne(4, 2) // ERREUR car on retourne un float au lieu d'un int attendu!
additionne(4.5, 2.5) // idem que précédent
PHP7 amène de nouveaux opérateurs:
Dernier point sur lequel il y a des nouveautés.