close

Pourquoi de plus en plus de typage en PHP ?

#1 Evolution du typage en PHP open

Le problème, c'est qu'aujourd'hui les sites internets se transforment en de véritables applications, développées par des équipes de développeurs. Plus on est nombreux dans une équipe de développeurs, plus on a besoin d'organisation et de rigueur. Sinon il y a risque de pagaille, une pagaille qui connaîtra son apogée lors des journées d'intégration. Journées d'intégration qui promettent d'être difficiles.

Tout cela est vrai quel que soit le langage. Et pour éviter ça, dans tous les langages, la démarche a été la même.

  • Pour mettre de la rigueur, on a évolué vers du typage plus fort.
  • Pour mettre de l'organisation, on a mis des fonctionnalités orientées objets.

Si on regarde le C (* celui de Kernighan et Ritchie), on a évolué vers du C++. Dans ce cas, c'est surtout de la techno orientée objet qu'on a rajouté. Quand on regarde JavaScript, et bien beaucoup de codeurs réclament une évolution vers du TypeScript. Et en PHP, on a fait un truc plutôt sympa, on a ajouté (* partir de 7.0) des possibilités de typage, mais elles sont optionnelles et on a musclé les possibilités de la techno orientée objet.

#2 Les contraintes de type open

Depuis PHP 7.0, vous pouvez ajouter des contraintes de type sur les arguments et sur les valeurs de retour des fonctions et des méthodes. Et depuis PHP 7.4, vous pouvez le faire sur les propriétés de classes. Vous le faites au moment de la déclaration.

Dans l'exemple ci-dessous, la fonction attend un entier en argument et ne retourne rien. Lorsqu'elle est appelée avec une chaîne, l'interpréteur déclenche un TypeError 😎.

TypeError si la contrainte de type n'est pas respectée.

Vous avez la possibilité d'affiner les choses, en déclarant une union de types. Pour cela, vous écrivez plusieurs types en les séparant par des pipes |. Dans l'exemple ci-dessous, int|string autorise soit un entier, soit une chaîne.

Depuis PHP 8.0, il est possible d'utiliser le type mixed qui signifie n'importe quel type de cette liste object |resource |array |string | float| int| bool| null. Depuis longtemps, ce type mixed est utilisé dans la documentation PHP. Et maintenant avec PHP 8 on peut l'utiliser dans le code, et bien sûr, avec la même signification. On l'avait déjà vu lorsqu'on avait utilisé un define dans le tutoriel sur les constantes et variables en PHP.

#3 La liste des types open

La liste des types PHP est la suivante :

  • Le type null est un type qui n'a qu'une valeur, la valeur NULL. Cette valeur, est utilisée pour une variable qui n'a pas ou plus de valeur.
  • Le type bool pour les booléen.
  • Le type int pour les entiers.
  • Le type float pour les nombres à virgule flottante.
  • Le type string pour les chaînes de caractères.
  • Le type array pour les tableaux.
  • Le type object pour les objets.
  • Le type callable pour les fonctions de rappel.
  • Le type resource est utilisé pour une variable spéciale, contenant une référence vers une ressource externe. Les ressources sont créées et utilisées par des fonctions spéciales.
  • Le type mixed depuis PHP 8.
  • Le type iterable.
  • Le type void signifie pas de valeur de retour dans une fonction ou une méthode.

Il y a deux types integer et double qui ne sont pas dans cette liste, liste qui est celle de la documentation (1er Mars 2023), mais qui peuvent encore traîner par ici ou par là. Par exemple, ils sont renvoyés par la fonction gettype(). Il me semble qu'il vaut mieux utiliser int et float. De toute façon mon éditeur VSCode n'en veut pas et remplace integer par int et double par float 😂.