TUTORIELS 
Créer une classe PHP
Comprendre l'intérêt d'une classe et de la programmation orientée objet à travers un exemple de création de classe pour gérer les requêtes et connexions à une base de données.  (5 avril 2001)
 

Le PHP est un langage orienté objet. Il permet de manipuler non seulement des fonctions, mais encore des classes (d'objets), qui regroupent des variables (attributs) et des fonctions (méthodes) utilisant ces variables.

Pourquoi une classe?

L'intérêt est donc de regrouper au sein d'une classe un ensemble de fonctions réutilisables, et donc tout ou partie des arguments sont communs. Pour mieux comprendre ce qu'est une classe, nous pouvons la considérer comme une "boîte" dont des exemplaires (les instances) sont créés à mesure des besoins. Les "boîtes" contiennent des valeurs qui leur sont propres, mais sous un seul label, quoique relatif à la boîte en question: pour continuer dans l'analogie, imaginons que la boîte contienne un "tiroir". Ce "tiroir" contiendra quelque chose de différent suivant les exemplaires de la boîte, mais ce contenu sera désigné, à chaque fois, sous le label "tiroir", à ceci près que sera mentionné la boîte à laquelle appartient le tiroir: "tiroir de boîte1", "tiroir de boîte2", etc.

Exemple
Prenons, pour illustrer notre propos, l'exemple d'une classe d'accès à une base de données. Nous choisissons ce cas car, sans l'utilisation d'une classe, différentes fonctions d'accès à la base (connexion, requête, etc.) devront manipuler des variables globales qui peuvent être concurrentes (par exemple, l'identifiant de la requête). En cas de requêtes simultanées, un problème surgit. Regrouper ces fonctions en classe permet de le résoudre. En pratique, il suffit de transformer quelque chose comme:

<?php
 $id_requete= 0; // identifiant de la requête courante 
  function connecte() { ... }
  function requete() { ... }
?>


En quelque chose comme:

<?php

 class base_MySQL{

   var $id_requete = 0; // identifiant de la requête courante 
   function connect() { ... }
   function requete() { ... }

}
?>

Notons bien qu'un problème se pose parce que le PHP ne dispose pas de pointeurs, qui permettent de manipuler des variables par références. La variable $id_requete ne peut, à elle seule, gérer le conflit potentiel issu de deux requêtes simultanées. L'absence de pointeurs impose l'accès à la variable via une instance de la classe. On écrira ainsi:

<?
 $base1 = new base_MySQL;
 $base2 = new base_MySQL;
?>


Et on accédera à notre variable par

$base1->id_requete;

(
par exemple - notons au passage que l'on n'écrit pas $base1->$id_requete).

L'instanciation avec le mot-clé "new" est nécessaire, car PHP ne sait pas quoi faire de la seule déclaration de la classe, qui spécifie un type de boîte (pour les connexions à une base MySQL en l'occurence) sans qu'aucune 'boîte" n'ait d'existence à proprement parler.

Des exemples plus fournis peuvent être trouvés dans la rubrique PHP/ASP puis Ressources, notamment les classes introduction au PHP et à la connexion à une base de donnée sont également disponibles.

 
[ Jérôme MorlonJDNet
 
Accueil | Haut de page