Forum PHP 2023 : Utilisez la bibliothèque standard PHP (SPL) au quotidien

Chaque langage de programmation, y compris PHP, offre sa propre bibliothèque de ressources. Les bibliothèques sont des ensembles de morceaux de code créés par d’autres développeurs. Elles nous permettent de gagner du temps en évitant de recréer des fonctionnalités courantes, tout en garantissant un développement plus rapide et plus serein.

Dans le domaine du développement, il est préférable d’utiliser du code existant, qui a déjà été testé, validé, et qui est maintenu par une communauté de développeurs. Cette approche est plus avantageuse que de recoder chaque fonctionnalité, car cela réduirait le risque de créer un code moins sécurisé et moins performant. Pour résumer, comme le dit l’adage, « pourquoi réinventer la roue ? ».

Cette conférence nous permet de découvrir et d’approfondir la bibliothèque standard de PHP, connue sous le nom de SPL. Nous explorerons des sujets tels que les itérateurs, les structures de données et les Exceptions. Ainsi que bien d’autres ressources utiles dans notre quotidien de développeurs.

Date : 12/10/2023 de 14h40 à 15h20

Nom du conférencier : Florian MERLE

Image Forum PHP 2023 SPL

Introduction aux SPL

L’utilisation fréquente de frameworks peut parfois faire oublier les interfaces natives fournies par PHP, qui offrent des fonctionnalités remarquables pour simplifier la programmation quotidienne. Cette conférence est l’occasion de revenir sur la bibliothèque standard de PHP : SPL (Standard PHP Library).

D’après la documentation de PHP, la libraire SPL est une compilation d’interfaces et de classes conçues pour résoudre des problèmes courants. Vous pouvez consulter une liste complète de toutes les fonctionnalités offertes par cette bibliothèque directement ici.

Image Forum PHP 2023 SPL

L’objectif de cette conférence n’est pas de fournir une analyse exhaustive de chaque composant de la bibliothèque SPL, mais plutôt de mettre l’accent sur des éléments spécifiques. Son but est de rappeler aux développeurs qu’avant d’adopter des solutions personnalisées (et parfois lourdes à mettre en place), il est bénéfique d’examiner les fonctionnalités offertes par la bibliothèque SPL. En voici un bref aperçu :

  • des Exceptions
  • des structures de données
  • des itérateurs pour interagir avec les types de données
  • des interfaces
  • un ensemble de fonctions utiles

Les Exceptions

L’utilisation des booléens peut s’avérer utile dans divers contextes, mais elle n’est pas idéale pour gérer les erreurs, car elle ne fournit pas d’informations spécifiques sur leur nature.

Dans de tels cas, il est recommandé d’utiliser des Exceptions, qui offrent des détails plus précis sur les erreurs et simplifient leurs gestions.

La bibliothèque standard de PHP (SPL) propose un ensemble d’Exceptions prédéfinies, qui sont des enfants de l’interface Throwable. Elles sont regroupées en deux grandes familles : RuntimeException et LogicException, chacune ayant des sous-classes plus spécifiques. Voici une vue d’ensemble de la hiérarchie des Erreurs et Exceptions dans PHP :

Arborescence des Throwables dans PHP, embarquant les Errors, Exceptions, et leurs enfants

Les structures de données

En PHP, les tableaux sont une structure de données couramment utilisée. Cependant, il est important de noter que, contrairement aux tableaux en langage C où les indices sont des entiers consécutifs, en PHP, les indices ne sont pas nécessairement des entiers. En PHP, nous pouvons également utiliser des chaînes de caractères comme indices.

Concrètement, les tableaux en PHP reposent sur une structure de données appelée « Hashmap » plutôt que sur des tableaux classiques. Dans un tableau associatif PHP, les données sont stockées dans des « buckets » qui sont identifiés par leur emplacement mémoire.

Chaque « bucket » contient une référence à l’entrée précédente (ou à la première si c’est le premier élément) et à l’entrée suivante (ou à la dernière si c’est le dernier élément). C’est cette structure qui permet l’itération, c’est-à-dire le passage d’une valeur à la précédente ou à la suivante dans le tableau. Vous pouvez voir un exemple de cette structure dans la capture d’écran ci-dessous :

Un inconvénient aux Hashmap en PHP est qu’ils sont souvent sur-optimisés, parfois de manière excessive pour certains besoins. De plus, les Hashmaps ne vident pas la mémoire après utilisation, contrairement à d’autres structures.

En conséquence, il peut être judicieux, en fonction des exigences spécifiques, de considérer l’utilisation de structures de données plus ciblées de la bibliothèque standard de PHP (SPL).

Parmi ces structures, on peut mentionner la bibliothèque DS. Cette dernière permet d’obtenir de meilleures performances tout en profitant d’une gestion plus efficace de la mémoire. Contrairement à Hashmap, elle libère la mémoire après utilisation.

Voici quelques exemples de structures de données fournies par la bibliothèque DS :

  • Vector
  • Queue
  • Deque
  • Stack
  • Set
  • Prioriy Queue
  • Map

Exemple d’implémentation de la bibliothèque DS :

new DS\PriorityQueue();

Les Iterators

Les itérateurs sont des objets qui permettent de parcourir les éléments d’une structure de données, comme un tableau ou une liste. En SPL, il existe des itérateurs prédéfinis, comme ArrayIterator, qui permet de parcourir des tableaux, ou DirectoryIterator, qui permet de parcourir des répertoires. Vous pouvez également créer vos propres itérateurs personnalisés en implémentant l’interface Iterator ou ses dérivées.

les Interfaces

SPL propose plusieurs interfaces qui permettent de définir un ensemble de méthodes que les classes doivent implémenter. Par exemple, l’interface Countable définit une méthode count() qui doit être implémentée par une classe pour permettre le comptage de ses éléments. De même, l’interface Iterator définit des méthodes permettant de parcourir les éléments d’une classe.

Un ensemble de fonctions utiles

Dans les frameworks populaires tels que Composer, Symfony et Laravel, les fonctions SPL sont intégrées pour des utilisations spécifiques :

  • Composer : spl_autoload_register est utilisé pour la gestion du chargement automatique des classes (autoloading). Il permet de définir des fonctions d’autoload personnalisées pour charger dynamiquement les classes au fur et à mesure de leur utilisation, évitant ainsi la nécessité d’inclure manuellement les fichiers de classe.
  • Symfony : spl_object_storage est principalement utilisé pour gérer des collections d’objets. Il fournit une interface pour stocker des objets de manière efficace et les associer à des données supplémentaires sans avoir à les modifier directement. Cela peut être utile dans divers scénarios, notamment lors de la manipulation d’entités
  • Laravel : Les Exceptions de SPL sont souvent utilisées pour gérer des erreurs spécifiques, telles que InvalidArgumentException, RuntimeException, ou LogicException.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.