Au début, on écrit souvent nos programmes PHP de façon linéaire, en rendant ainsi la maintenance difficile.
Il vaut mieux faire en sorte de couper le code en fonctions, ou en différents petits scripts. Mais toute modification d'une fonction demande alors de la retrouver, ce qui peut être dans certain cas épique ! Alors pour les personnes qui ont des problèmes de rangement, on a créé les classes, qui permettent de mieux organiser nos applications.

1- Avant propos

Ce tutorial est en fait un exemple détaillé, qui permet d'illustrer le fonctionnement d'une classe PHP4 (ce tutorial ne traite pas des classes PHP5). Il nécessite quand même d'en savoir un minimum sur les classes d'objets, je vous conseille donc de lire le tutorial Introduction aux classes d'objet avant.

Pour comprendre le rôle d'une classe, on va voir une relation avec le monde que nous connaissons tous.

Un pingouin (juste par hasard) n'est pas un animal jeté comme ça sur terre, il a suivi une évolution et hérité des caractéristiques de sa famille (les oiseaux), tout en possédant ses propres caractéristiques (il nage sous l'eau).
Ce qui donne : Famille (classe) Oiseau -> Famille (classe) Pingouin

Quel est le rapport avec la programmation ? A première vue aucun, mais nous allons utiliser un exemple d'évolution analogue, avec des véhicules.
NB : Vous pourrez télécharger le code source de l'exemple complet en fin de tutorial

2- Définition du véhicule

Définition d'un véhicule :

  1. <?php
  2.  
  3. class vehicule
  4. {
  5.  
  6. var $roues;
  7. var $passagers;
  8. var $classname = 'vehicule';
  9. var $nom = '';
  10. function vehicule($roues, $passagers)
  11. {
  12. $this->roues = $roues;
  13. $this->passagers = $passagers;
  14. }
  15. function init_nom($nom_type)
  16. {
  17. $this->nom = $nom_type;
  18. }
  19. function jesuis()
  20. {
  21. printf("<p>Je suis un vehicule à %s roues ", $this->roues);
  22. printf("et %s passagers, ", $this->passagers);
  23. printf("mon type est %s. ", $this->classname);
  24. if ($this->nom)
  25. printf("Et je m'appelle %s", $this->nom);
  26. echo '</p>';
  27. }
  28.  
  29. }
  30.  
  31. ?>

La fonction véhicule est appelée automatiquement lors de la création de l'objet (constructeur, même nom que la classe) avec comme argument le nombre de roues et le nombre de passagers. La méthode jesuis() affiche les caractéristiques de l'objet.

3- Héritage

Voici la première partie intéressante des classes : l'héritage. On utilise le mot clé extends pour faire hériter un objet.

  1. <?php
  2.  
  3. // inclusion du fichier contenant la définition de ma première classe
  4. require 'ma_classe_vehicule.php';
  5.  
  6. // classe velo
  7. class velo extends vehicule
  8. {
  9.  
  10. var $classname = "velo";
  11. // constucteur
  12. function velo()
  13. {
  14. $this->vehicule(2, 1);
  15. }
  16.  
  17. }
  18.  
  19. ?>

L’objet vélo est un véhicule de 2 roues avec 1 passager.

4- Surcharge

On reprend le même principe pour l'objet des véhicules motorisés (mvehicule)

  1. <?php
  2.  
  3. // inclusion du fichier contenant la définition de ma première classe
  4. require 'ma_classe_vehicule.php';
  5.  
  6. // classe vehicule motorise
  7. class mvehicule extends vehicule
  8. {
  9.  
  10. var $classname = "motorisé";
  11. var $moteur;
  12. function init_moteur($cylindre)
  13. {
  14. $this->moteur = $cylindre;
  15. }
  16. function jesuis()
  17. {
  18. printf("Mon moteur est de %s cc. ", $this->moteur);
  19. vehicule::jesuis(); // appel à la fonction de la classe vehicule
  20. }
  21.  
  22. }
  23.  
  24. ?>

Là par contre, on a surchargé la fonction jesuis pour ajouter l'affichage de la nouvelle caractéristique de la classe, le moteur.

5- Conclusion

Pour compléter l'exemple, on crée deux nouvelles classes (voiture et moto) à partir de la classe véhicule motorisé. Puis on initialise les classes, car il faut bien les utiliser !

Exemple complet :

  1. <?php
  2.  
  3. class vehicule
  4. {
  5.  
  6. var $roues;
  7. var $passagers;
  8. var $classname = 'vehicule';
  9. var $nom = '';
  10. function vehicule($roues, $passagers)
  11. {
  12. $this->roues = $roues;
  13. $this->passagers = $passagers;
  14. }
  15. function init_nom($nom_type)
  16. {
  17. $this->nom = $nom_type;
  18. }
  19. function jesuis()
  20. {
  21. printf("<p>Je suis un vehicule à %s roues ", $this->roues);
  22. printf("et %s passagers, ", $this->passagers);
  23. printf("mon type est %s. ", $this->classname);
  24. if ($this->nom)
  25. printf("Et je m'appelle %s", $this->nom);
  26. echo '</p>';
  27. }
  28.  
  29. }
  30.  
  31. // classe velo
  32. class velo extends vehicule
  33. {
  34.  
  35. var $classname = "velo";
  36. // constucteur
  37. function velo()
  38. {
  39. $this->vehicule(2, 1);
  40. }
  41.  
  42. }
  43.  
  44. // classe vehicule motorise
  45. class mvehicule extends vehicule
  46. {
  47.  
  48. var $classname="motorisé";
  49. var $moteur;
  50. function init_moteur($cylindre)
  51. {
  52. $this->moteur = $cylindre;
  53. }
  54. function jesuis()
  55. {
  56. printf("Mon moteur est de %s cc. ", $this->moteur);
  57. vehicule::jesuis(); // appel à la fonction de la classe vehicule
  58. }
  59.  
  60. }
  61.  
  62. // classe voiture
  63. class voiture extends mvehicule
  64. {
  65. var $classname= "voiture";
  66. function voiture()
  67. {
  68. $this->vehicule(4, 5);
  69. }
  70. }
  71.  
  72. // classe moto
  73. class moto extends mvehicule
  74. {
  75. var $classname= "moto";
  76. function moto()
  77. {
  78. $this->vehicule(2, 2);
  79. }
  80. }
  81.  
  82. // création des objets
  83. $bmx = new velo;
  84. $cb = new moto;
  85. $twingo = new voiture;
  86. // on ajoute un nom et à l'objet
  87. $twingo->init_nom("TWINGO");
  88. $twingo->init_moteur(1600);
  89. $cb->init_nom("CB 500");
  90. $cb->init_moteur(500);
  91. // corps du programme
  92. echo '<h2>VELO</h2>';
  93. $bmx->jesuis();
  94. echo '<h2>TWINGO</h2>';
  95. $twingo->jesuis();
  96. echo '<h2>MOTO</h2>';
  97. $cb->jesuis();
  98.  
  99. ?>

Résultat :

Télécharger le code source de l'exemple en archive zip.

Tutorial écrit par PHAB