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.
|