Apprendre à coder sur pierre-giraud.com

DES COURS COMPLETS ET GRATUITS POUR TOUS

SOMMAIRE

Introduction

  1. Présentation du cours
  2. Introduction au PHP
  3. Mettre en place un env. de travail

Les bases en PHP

  1. Syntaxe de base du PHP
  2. Premières instructions PHP
  3. Introduction aux variables PHP
  4. Types de valeurs et concaténation
  5. Opérations sur les variables
  6. Conditions et opérateurs de comparaison
  7. Les conditions if, if...else et if... elseif... else
  8. Utilisation avancée des conditions
  9. Structures ternaires et switch
  10. Les boucles PHP
  11. Découverte des fonctions
  12. La portée des variables
  13. Les constantes PHP
  14. Les variables tableaux PHP
  15. Tableaux associatifs
  16. Tableaux multidimensionnels
  17. Test n°1

Gestion des dates en PHP

  1. Le timestamp
  2. Obtenir et formater une date
  3. Tester la validité d'une date
  4. Test n°2

Opérations sur les fichiers en PHP

  1. Lire, ouvrir, fermer un fichier
  2. Parcourir et lire un fichier par partie
  3. Créer un fichier et écrire dedans
  4. Ecrire dans un fichier
  5. Les instructions include et require
  6. Test n°3

Les variables superglobales

  1. Découverte des variables superglobales
  2. Les cookies
  3. Les sessions
  4. Test n°4

Les expressions régulières et PHP

  1. Découverte des regex
  2. Les fonctions PHP PCRE
  3. Quantifieurs et options
  4. Classes de caractères
  5. Test n°5

L'orienté objet en PHP

  1. Classes, instances et objets
  2. Propriétés et méthodes
  3. Extension de classe et héritage
  4. Le principe d'encapsulation
  5. La méthode constructeur
  6. L'opérateur de résolution de portée et la surcharge
  7. Constantes, méthodes et propriétés statiques
  8. Les classes et méthodes abstraites
  9. Les interfaces
  10. Les méthodes magiques
  11. Le chainage de méthodes
  12. Test n°6

Notions avancées en POO

  1. Le typage explicite
  2. Les traits
  3. Les closures et les classes anonymes
  4. L'auto-chargement des classes
  5. Le mot clef final
  6. Résolution statique à la volée
  7. Parcourir des objets
  8. Le clonage d'objets
  9. Comparaison d'objets
  10. Test n°7

Filtres, erreurs et exceptions

  1. Introduction aux filtres
  2. Utilisation pratique des filtres
  3. Gérer les erreurs en PHP
  4. Gérer les exceptions en PHP

FONCTIONS ANONYMES, CLOSURES ET CLASSES ANONYMES

Découverte et définition des fonctions anonymes

Les fonctions anonymes, qu’on appelle également des closures, sont des fonctions qui ne possèdent pas de nom.

On va créer une fonction anonyme de la même façon que l’on crée une fonction normale à la différence qu’on ne va ici pas préciser de nom.

Création d'une fonction anonyme en PHP

A ce stade, vous devriez déjà vous poser deux questions : quel est l’intérêt de créer de telles fonctions et comment peut on les exécuter ou les appeler si elles ne possèdent pas de nom ?

Les closures vont être principalement utilisées en tant que fonction de rappel.

Une fonction de rappel est une fonction qui va être appelée par une autre fonction dans un cas spécifique pour effectuer une tâche précise.

En effet, certaines fonctions PHP peuvent accepter des fonctions de rappel en argument comme la fonction usort() par exemple qui va servir à trier un tableau en utilisant une fonction de comparaison ou encore la fonction array_map() qui est la fonction généralement utilisée pour illustrer l’intérêt des closures.

La fonction array_map() va appliquer une fonction sur des éléments d’un tableau et retourner un nouveau tableau. On va donc devoir passer deux arguments à celle-ci : une fonction qui va dans notre cas être une closure et un tableau. Prenons immédiatement un exemple.

Utilisation d'une fonction anonyme en PHP

Explication de l'utilité des fonctions anonymes en PHP

Dans cet exemple, on commence par créer une closure dont le rôle est de calculer et de renvoyer le carré d’un nombre. On place cette closure dans une variable $carre.

Ensuite, on crée un tableau contenant les chiffres 1, 2, 3, 4 et 5.

Finalement, on utilise notre fonction array_map() en lui passant notre variable contenant notre fonction de rappel ainsi que notre tableau afin qu’elle renvoie un nouveau tableau et appliquant notre fonction de rappel à chaque élément du tableau passé.

On utilise alors une instruction print pour afficher rapidement les éléments de notre nouveau tableau qu’on sépare par un espace avec la fonction implode() qui renvoie les éléments d’un tableau en fonction d’un séparateur choisi.

Les closures et la classe closure

Si je vous parle de fonctions anonymes dans cette partie dédiée à la POO, c’est parce que les fonctions anonymes sont avant tout des objets appartenant à la classe prédéfinie PHP Closure.

En effet, les closures sont tout simplement des instances de la classe Closure.

Notez que PHP dispose de plusieurs interfaces et classes préconçues comme les interfaces Traversable, Iterator, Throwable, ArrayAccess et Serializable ou encore la classe Generator.

L’un des grands intérêts de ces interfaces et classes prédéfinies est qu’elles possèdent des méthodes natives qu’on va pouvoir utiliser très simplement.

Nous toucherons certainement quelques mots de ces interfaces et classes plus tard dans cette partie. Pour le moment, concentrons-nous sur notre classe Closure

La classe Closure possède des méthodes qui vont nous permettent de contrôler une closure après sa création. Cette classe possède également une méthode __invoke() qui va ici s’avérer très utile puisqu’on va donc pouvoir exécuter nos closures simplement.

Je vous rappelle ici que la méthode magique __invoke() va s’exécuter dès qu’on se sert d’un objet comme d’une fonction.

Définition et découverte des closures en PHP

Création et implémentation d'une closure en PHP

Comme vous pouvez le constater, nos variables objets $bonjour et $carre sont utilisées comme fonctions pour exécuter les closures contenues à l’intérieur et les résultats sont bien renvoyés.

Notez que comme la classe Closure est une classe incluse dans le cœur de PHP, nous n’avons pas besoin d’instancier de nouveaux objets explicitement avec le mot clef new.

Définition et intérêt des classes anonymes

Les classes anonymes ont été implémentées récemment en PHP, puisque leur support n’a été ajouté qu’avec le PHP 7.

Les classes anonymes, tout comme les fonctions anonymes, sont des classes qui ne possèdent pas de nom.

Les classes anonymes vont être utiles dans le cas ou des objets simples et uniques ont besoin d’être créés à la volée.

Créer des classes anonymes va donc principalement nous faire gagner du temps et améliorer in-fine la clarté de notre code.

On va pouvoir passer des arguments aux classes anonymes via la méthode constructeur et celles-ci vont pouvoir étendre d’autres classes ou encore implémenter des interfaces et utiliser des traits comme le ferait une classe ordinaire.

Notez qu’on va également pouvoir imbriquer une classe anonyme à l'intérieur d'une autre classe. Toutefois, on n’aura dans ce cas pas accès aux méthodes ou propriétés privées ou protégées de la classe contenante.

Pour utiliser des méthodes ou propriétés protégées de la classe contenante, la classe anonyme doit étendre celle ci. Pour utiliser les propriétés privées de la classe contenant dans la classe anonyme, il faudra les passer via le constructeur.

Création et utilisation de classes anonymes

Voyons immédiatement comment créer et manipuler des classes anonymes à travers différents exemples simples.

Création d'une classe anonyme et stockage dans une variable en PHP

Affichage des informations de notre classe anonyme en orienté objet PHP

Ici, on commence avec un exemple simple en se contentant de déclarer une classe anonyme qu’on assigne à une variable qui devient de fait un objet.

Notre classe anonyme contient des propriétés et des méthodes tout comme une classe classique.

Ensuite, on effectue différentes opérations simples : récupération et affichage des valeurs des propriétés, exécution des méthodes de notre classe anonyme, etc. afin que vous puissiez observer les différentes opérations que l’on peut réaliser.

Notez bien une nouvelle fois que le support des classes anonymes par le PHP est très récent : il est donc tout à fait possible que votre éditeur ne reconnaisse pas cette écriture (ce qui n’est pas grave en soi) ou que votre WAMP, MAMP, etc. n’arrive pas à l’exécuter si vous ne possédez pas la version la plus récente.

On peut encore assigner une classe anonyme à une variable en passant par une fonction.

Dans ce cas-là, on pourra écrire quelque chose comme cela :

Création d'une classe anonyme assignée à une variable via une fonction en PHP

Affichage des informations de notre classe anonyme en orienté objet PHP

Ce code est tout à fait comparable au précédent à la différence qu’on crée une fonction qui va retourner la définition de notre classe anonyme tout simplement.

Finalement, on peut également utiliser un constructeur pour passer des arguments à une classe anonyme lors de sa création.

Création d'une classe anonyme en passant des arguments via le constructeur

Affichage des informations de notre classe anonyme en orienté objet PHP

Là encore, rien d’inconnu. Notez qu’on déclare ici les deux variables qui vont nous servir d’arguments nous-mêmes pour plus de facilité et car ce n’est pas l’objet de notre exemple. En pratique, nous obtiendrions ces arguments à la suite d’opérations ou en récupérant des valeurs relatives à un utilisateur, etc.

Ensuite, on se contente de passer ces variables à notre classe anonyme via son constructeur.

Finalement, retenez encore une fois que dans le cas où une classe anonyme est imbriquée dans une autre classe, la classe anonyme doit l’étendre afin de pouvoir utiliser ses propriétés et méthodes publiques. Pour utiliser ses méthodes et propriétés privées, alors il faudra également les passer via le constructeur.

Regardez plutôt l’exemple suivant :

Création d'une classe anonyme à l'intérieur d'une autre classe avec passage d'arguments en PHP

Affichage des informations de notre classe anonyme en orienté objet PHP

Cette partie peut vous paraitre moins concrète que les précédentes, et ce dernier exemple en particulier peut vous semble tiré par les cheveux.

En pratique, je vous rassure, vous n’aurez que très rarement à faire ce genre de choses ou même à utiliser les classes anonymes.

Cependant, celles-ci peuvent s’avérer plus pratique et rapides à créer dans certaines situations, et ce cours est un cours complet donc je me dois de vous présenter toutes les possibilités actuelles de la POO PHP !

Chapitre précédent

Chapitre suivant