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

CONSTANTES DE CLASSE ET PROPRIETES ET METHODES STATIQUES

Définition et utilité des constantes

Les constantes sont des variables dont la valeur ne peut pas changer durant la durée de vie d’un script. En POO, nous allons définir nos constantes de classe d’une manière un peu différente de nos constantes « classiques ».

Les constantes vont principalement nous servir à rendre le code plus lisible en liant des valeurs à des noms ou à simplifier nos écritures.

Créer une constante de classe

Pour définir une constante de classe, on va utiliser le mot clef const suivi du nom de la constante en majuscules et sans le signe $ par convention pour éviter de les confondre avec des variables classiques.

Reprenons nos fichiers créés précédemment et nos deux classes Humain et Francais.

Imaginons que l’on souhaite calculer ce que gagne chacun de nos personnages créés à partir de la classe Humain. Nos personnages ne sont pas tous payés au même taux horaire mais ils travaillent tous 35h par semaine. Nous allons donc créer une constante pour le nombre d’heures effectuées.

Création d'une constante de classe en POO PHP

Dans cet exemple, on commence par définir une constante de classe HEURE_TRAVAIL grâce au mot clef const et on stocke la valeur 35 à l’intérieur.

Ensuite, on crée une méthode getSalaire() dont le rôle va être de retourner le salaire par semaine d’un personnage.

On calcule le salaire par semaine en multipliant le taux horaire par le nombre d’heures effectuées.

Pour accéder à une constante de classe, il faut utiliser l’opérateur de résolution de portée ::.

Rappelez-vous que cet opérateur suit toujours la logique suivante : NomDeClasse::ProprieteOuMethode.

Dans notre cas la constante a été définie dans la classe en soi, on utilise alors le mot clef self pour faire référence à notre classe. Notez qu’on peut accéder à une constante définie dans une classe parent à partir d’une classe enfant en utilisant le mot clef parent devant l’opérateur de résolution de portée.

Cependant, comprenez bien qu'il serait aberrant ici d'utiliser la pseudo variable $this puisque notre constante appartient bien à notre classe et pas à un objet en particulier.

Finalement, on utilise l’instruction return pour retourner le résultat de ce calcul.

Côté script général, nous n’avons donc plus qu’à appeler notre méthode getSalaire() en lui passant le taux horaire de l’objet créé en argument afin d’obtenir le salaire par semaine de notre objet.

Utilisation d'une constante de classe en POO PHP

Affichage d'une constante de classe en POO PHP

Notez bien qu’une constante ne peut avoir qu’une valeur à travers un script à un moment donné. Cependant, on peut définir une nouvelle valeur pour une constante lorsqu’on étend une classe.

Notez également que depuis PHP 7.1, il est possible de définir la visibilité d’une constante avec les mots clefs public, private etc. Vérifiez bien cependant que votre architecture supporte ces nouvelles notations.

Définition et utilité des propriétés et méthodes statiques

Les propriétés et méthodes statiques sont des propriétés et méthodes qui appartiennent exclusivement à une classe et non pas à un objet et qui vont donc être les mêmes pour toutes les instances d’une classe.

Il est possible d’accéder à ces propriétés et méthodes sans avoir à créer d’instance de classe.

Attention à ne pas confondre propriétés statiques et constantes de classe : une propriété statique peut tout à fait changer de valeur au cours du temps à la différence d’une constante dont la valeur est fixée. Simplement, la valeur d’une propriété statique sera partagée par tous les objets issus de la classe dans laquelle elle a été définie.

Définir des propriétés et des méthodes statiques

On va pouvoir définir une propriété ou une méthode statique à l’aide du mot clef static.

Prenons immédiatement un premier exemple afin que vous compreniez bien l’intérêt et le fonctionnement des propriétés et méthodes statiques.

Imaginons par exemple que l’on souhaite compter combien d’objets ont été créés en utilisant le constructeur de notre classe Humain.

Pour stocker le nombre d’objets créés, nous allons définir une propriété statique. En effet, le nombre d’objets créés n’est pas dépendant d’un objet en particulier et appartient bien à la classe.

En revanche, il va falloir que la valeur stockée dans notre propriété statique se mette bien à jour à chaque nouvel objet créé. Pour faire cela, nous allons implémenter la valeur dans notre propriété à chaque nouvel appel du constructeur de classe.

Voici le code que je vous propose :

Définition d'une propriété statique en POO PHP

On commence par définir notre propriété statique $objCrees grâce au mot clef static dans la classe et en lui donnant une visibilité protected.

Ensuite, on incrémente la valeur de notre propriété dans le constructeur de notre classe.

Notez bien qu’on n’utilisera jamais le mot clef $this avec une propriété ou méthode statique puisque ces propriétés et méthodes appartiennent à la classe exclusivement et ne peuvent être appelées depuis un objet.

On va donc plutôt utiliser le mot clef self qui fait référence à la classe en soi. De plus, vous remarquez qu’on utilise l’opérateur de résolution de portée pour accéder à notre propriété statique. C’est obligatoire et si nous tentions de procéder autrement nous aurions une erreur.

Ici, littéralement, on demande au PHP « incrémente la valeur de la propriété $objCrees définie dans la classe Humain à chaque fois que le constructeur de classe est appelé », c’est-à-dire à chaque nouvel objet créé avec ce constructeur.

Maintenant, il nous reste un deuxième défi : comment manipuler cette valeur (la récupérer, l’afficher, etc.) sachant qu’elle appartient à la classe exclusivement ?

Pour manipuler une variable statique, nous allons créer une méthode statique avec à nouveau le mot clef static tout simplement.

Dans le cas présent, on va tout simplement vouloir retourner le nombre d’objets créés en utilisant le constructeur de notre classe Humain.

Voici le code que je vous propose :

Définition d'une méthode statique en POO PHP

La méthode statique totalObjCrees() se contente de retourner la valeur contenue dans la propriété statique $objCrees.

Notez qu’on utilise à nouveau le mot clef self et l’opérateur :: pour accéder à notre propriété statique. Notez également que pour récupérer la valeur contenue dans notre propriété, nous devons cette fois-ci bien préciser le signe $ devant le nom de la propriété.

On va ensuite finalement pouvoir appeler notre méthode soit depuis un objet de la classe, soit depuis la classe en soi. Notez que pour des raisons de clarté et de stricte validité du code, on préférera appeler une méthode statique depuis la classe en utilisant l’opérateur ::.

Profitez-en également pour noter une chose importante : depuis le PHP 5.3, il est possible de faire référence à une classe en soi en utilisant une variable.

Pour faire cela, on va tout simplement "stocker" une copie de la classe dans la variable en question.

Appel d'une méthode statique depuis le script en POO PHP

Résultat de la méthode statique en POO PHP

Comme vous pouvez le voir, chacune de ces quatres écritures fonctionne (en utilisant une version PHP 5.6). Cependant, pour vous assurer la meilleure compatibilité possible et éviter de lever des erreurs PHP, je vous conseille une nouvelle fois d’accéder aux méthodes statiques depuis la classe en soi.

Le résultat (2) est ici bien correct puisque le constructeur de notre classe Francais utilise lui-même le constructeur de notre classe Humain.

Si on modifie le constructeur de notre classe fille Francais afin qu’il ne fasse plus appel à celui de la classe Humain, les objets créés à partir de la classe Francais ne seront plus comptés bien évidemment.

Regardez plutôt l'exemple ci-dessous pour vous en convaincre :

Modification de la classe fille et héritage des propriétés et méthodes statiques

Utilisation de nos méthodes et propriétés statiques

Résultat de l'exécution de notre méthode statique

Chapitre précédent

Chapitre suivant