Generics en PHP : pourquoi les utiliser et comment les utiliser pour les débutants

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction aux Generics en PHP

\n\n

Dans le monde du développement moderne en PHP, une attention croissante est portée au typage strict et à la sécurité du code. L'un des outils les plus puissants apparus dans PHP 8.0 sont les Generics (types génériques). Si vous êtes débutant en PHP et que vous entendez ce terme pour la première fois, ne vous inquiétez pas. Dans cet article, nous allons expliquer simplement ce que sont les Generics, pourquoi ils sont nécessaires et comment les utiliser en pratique.

\n\n

Imaginez la situation : vous écrivez une fonction qui doit fonctionner avec différents types de données — nombres, chaînes de caractères, objets. Sans génériques, vous devriez soit utiliser mixed (ce qui réduit la sécurité), soit écrire des fonctions séparées pour chaque type. Les Generics résolvent ce problème de manière élégante et efficace.

\n\n

Dans cet article, nous aborderons :

\n
    \n
  • Ce que sont les Generics et leurs principaux avantages
  • \n
  • Comment déclarer des classes et fonctions génériques
  • \n
  • Des exemples concrets d'utilisation dans des projets
  • \n
  • Les erreurs typiques des débutants et comment les éviter
  • \n
\n\n

Que sont les Generics et pourquoi sont-ils nécessaires ?

\n\n

Le problème sans Generics

\n\n

Supposons que vous créiez une classe pour travailler avec une collection d'éléments. Sans génériques, vous devrez utiliser le type mixed ou écrire des classes spécialisées pour chaque type de données :

\n\n
<?php\n// Mauvaise approche — utilisation de mixed\nclass Collection {\n    private array $items = [];\n\n    public function add(mixed $item): void {\n        $this->items[] = $item;\n    }\n\n    public function get(int $index): mixed {\n        return $this->items[$index] ?? null;\n    }\n}\n\n// On peut maintenant ajouter accidentellement une chaîne dans une collection de nombres\n$numbers = new Collection();\n$numbers->add(42);\n$numbers->add('chaîne'); // Aucune erreur ne se produit, mais la logique est compromise\n?>
\n\n

Ce code fonctionne, mais il n'est pas sûr. Vous ne savez pas quels types de données sont stockés dans la collection et vous pourriez obtenir une erreur lors de l'exécution.

\n\n

La solution avec Generics

\n\n

Les Generics permettent de spécifier avec quels types de données votre classe, fonction ou interface va fonctionner. La syntaxe ressemble aux chevrons <T>, où T est un espace réservé (placeholder) pour un type spécifique :

\n\n
<?php\n// Bonne approche — utilisation de Generics\nclass Collection<T> {\n    private array $items = [];\n\n    public function add(T $item): void {\n        $this->items[] = $item;\n    }\n\n    public function get(int $index): ?T {\n        return $this->items[$index] ?? null;\n    }\n}\n\n// Maintenant, PHP va vérifier les types\n$numbers = new Collection<int>();\n$numbers->add(42);\n// $numbers->add('chaîne'); // Fatal error: Uncaught TypeError\n?>
\n\n

Maintenant, le compilateur PHP sait que la collection $numbers ne peut contenir que des nombres entiers. Toute tentative d'ajouter une chaîne de caractères provoquera une erreur lors du développement.

\n\n

Principaux avantages des Generics

\n\n
    \n
  • Sécurité des types (Type Safety) — les erreurs sont détectées lors de la compilation, et non lors de l'exécution.
  • \n
  • Lisibilité du code — on comprend immédiatement avec quels types la fonction ou la classe travaille.
  • \n
  • Réduction de la duplication — une seule classe générique remplace des dizaines de classes spécialisées.
  • \n
  • Meilleur support des IDE — l'autocomplétion et les suggestions fonctionnent correctement.
  • \n
\n\n

Comment utiliser les Generics en PHP : exemples pratiques

\n\n

1. Classes génériques

\n\n

Le scénario le plus courant est la création de collections, piles, files d'attente et autres structures de données. Regardons un exemple de pile :

\n\n
<?php\nclass Stack<T> {\n    private array $stack = [];\n\n    public function push(T $item): void {\n        $this->stack[] = $item;\n    }\n\n    public function pop(): ?T {\n        return array_pop($this->stack);\n    }\n\n    public function isEmpty(): bool {\n        return empty($this->stack);\                

Blogs

Book Recommendations