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

LES CLASSES ET METHODES ABSTRAITES

Définition et utilité des classes et méthodes abstraites

Dans certaines situations, nous allons vouloir créer des classes qui ne doivent pas être manipulées directement mais seulement via des classes filles.

Dans ce cas là, nous allons pouvoir définir des classes abstraites. En effet, la particularité d’une classe définie comme abstraite est qu’elle ne peut pas être instanciée directement.

Nous allons donc utiliser les classes abstraites lorsque l’on souhaite fournir un « plan » ou « schéma » de création pour d’autres classes. Ce schéma de base ne peut pas être modifié ou utilisé directement mais va servir à créer des classes enfant.

Cette façon de faire va être très utile pour fournir un rail, c’est-à-dire une ligne directrice dans le cas de développements futurs. En effet, en créant un plan protégé on évite aux développeurs voulant utiliser notre classe d’avoir à recoder toute la classe tout en mettant des jalons pour leurs développements et donc on diminue le nombre potentiel d’erreurs de code.

L’idée derrière la création de méthodes abstraites est la même : lorsqu’une classe utilise des méthodes abstraites, le PHP va forcer les classes filles à définir ces méthodes.

En effet, une méthode abstraite ne doit jamais contenir de code à exécuter ni même de body dans sa définition : lorsqu’on défini une méthode comme abstraite, on déclare simplement la signature de la méthode mais on ne peut pas définir son implémentation (c’est-à-dire son body).

On va créer des méthodes abstraites lorsqu’on veut par exemple forcer les développeurs à définir eux-mêmes certaines méthodes pour rendre un code plus logique ou mieux structuré.

Notez bien que toute classe qui contient une méthode abstraite doit être elle-même définie comme abstraite.

Utiliser des classes et méthodes abstraites pour créer un code plus structuré

On va pouvoir définir une classe ou méthode comme abstraite grâce au mot clef abstract.

Une nouvelle fois, rappelez-vous que l’intérêt d’utiliser des classes et des méthodes abstraites est d’une part d’offrir une base non modifiable pour des développements futurs et d’autre part de forcer les développeurs à suivre une certaine logique dans le code en les obligeant à définir certaines méthodes et etc.

Par exemple, on pourrait récupérer notre classe Humain créée au cours des chapitres précédents et la définir comme abstraite.

Dans cette classe abstraite, nous allons par exemple définir une méthode abstraite qui devra permettre de définir des adresses.

Définition d'une classe et d'une méthode abstraites

Ici, j'ai supprimé un peu du code de notre classe Humain par rapport aux chapitres précédents pour plus de clarté et pour bien se concentrer sur le sujet de ce chapitre.

Comme vous pouvez le voir, on utilise le mot clef abstract pour définir une classe ou une méthode abstraite. Notez bien à nouveau qu’on n'implémente pas de body lors de la définition d'une méthode abstraite !

Essayons maintenant d’instancier notre classe Humain.

Tentative de création d'objet à partir d'une classe abstraite en POO PHP

On ne peut pas instancier une classe abstraite en POO PHP

Le PHP renvoie une erreur fatale. En effet, rappelez-vous qu’on ne peut pas instancier une classe abstraite puisque le but d’une classe abstraite est de servir de plan pour d’autres classes qui vont l’étendre.

Essayons maintenant autre chose : tentons d’instancier notre classe fille Francais.

Tentative de création d'un objet à partir d'une classe enfant d'une classe abstraite

Notre méthode abstraite n'a pas été implémentée

Toute méthode abstraite doit impérativement être implémentée dans une classe enfant en PHP POO

Comme vous pouvez le voir, PHP renvoie une nouvelle erreur fatale. Cette fois-ci, la cause est notre méthode abstraite. En effet, souvenez vous que lorsqu'une classe parent possède des méthodes abstraites, celles-ci doivent être impérativement implémentées par les classes qui l'étendent.

De plus, notez également que lors de la définition d’une méthode abstraite dans une classe enfant, la visibilité doit être à minima conservée ou doit être moins restreinte. Par exemple, si on définit une méthode abstraite avec protected dans la classe parent, l’implémentation de la méthode doit être définie avec protected ou public, mais pas private qui correspond à une visibilité plus restreinte que le protected de départ.

J’espère à travers ces exemple vous avoir bien montré en quoi l’utilisation de classes et méthodes abstraites permettait de fournir des jalons aux développeurs et de structurer leur code d’une certaine manière.

Exemple pratique d’utilisation des classes et méthodes abstraites

Modifions maintenant nos scripts afin de rendre l’ensemble fonctionnel.

Nous aimerions que les classes qui vont étendre notre classe Humain implémentent une méthode qui va définir une adresse pour les objets créés en respectant un certain ordre.

Par exemple, on va vouloir que toute adresse contienne le nom et numéro de rue, le code postal et la ville à minima.

Pour cette raison, on définit une méthode abstraite setAdresse() dans notre classe abstraite Humain qui va avoir besoin de trois paramètres pour fonctionner qu'on représente par $codeAdresse, $codePostal et $codeVille.

On définit également dans cette même classe trois propriétés $add, $postal et $ville qui vont stocker les valeurs effectives à passer en argument de notre méthode.

Définition d'une classe abstraite en POO PHP

Ensuite, on implémente notre méthode setAdresse() dans la classe enfant Francais. Rien de bien particulier ici, on se contente de stocker les valeurs passées en argument dans nos propriétés $add, $postal et $ville.

Finalement, on crée une dernière méthode getAdresse() dont la fonction est de renvoyer l'adresse complète. Notez qu'on a créé une constante PAYS dans notre classe enfant qu'on réutilise au sein de cette méthode.

Ici, j'aurais pu une nouvelle fois ne créer qu'une seule méthode mais je préfère séparer setter et getter afin de rendre l'ensemble plus clair et compréhensible pour vous.

Implémentation d'une méthode abstraite en POO PHP

Nous n'avons donc plus qu'à créer un nouvel objet de la classe Francais et à définir puis afficher son adresse. Bien évidemment, ici, nous définissons une nouvelle fois les valeurs nous mêmes pour l'exemple et donc vous pouvez avoir l'impression que nous avons créé un code complexe pour rien. Pensez simplement qu'en pratique vous pourrez réutiliser ce genre de code pour afficher ou stocker des valeurs non connues à l'avance.

On utilise notre classe abstraite pour définir une classe enfant et des objets

Notre classe abstraite a été utilisée correctement

Chapitre précédent

Chapitre suivant