La programmation orientée objet
Introduction
Ce cours s’adresse à ceux qui possèdent déjà une certaine base en POO.
Ce cours contient des notions disponibles uniquement à partir de PHP5 et ne fonctionneront donc pas avec les versions antérieures.
Notion de classe
Une classe définie une structure de base pour un possible objet : propriétés et méthodes y seront déclarées.
Notion d’objet
Un objet est une variable possédant une structure complexe constituée de propriétés (variables) et de méthodes (fonctions).
En effet, les variables contenues dans un objet sont nommées attributs et les fonctions, méthodes.
Un objet peut également, à partir de PHP5, posséder des méthodes réservées au constructeur et destructeur. Ces nouvelles notions seront approfondies un peu plus loin dans ce cours.
Instanciation
Avant de pouvoir exploiter votre classe, vous devrez en faire une instanciation à l’aide du mot-clé new. Une instanciation est en fait une sorte de copie de la structure à l’intérieur d’une variable. Bref, vous insérer dans une variable votre classe afin de pouvoir l’utiliser.
Notez que les objets instanciés sont totalement indépendants les uns des autres.
Exemple
<?php // Définition d'une classe vide class uneClasse { } // Instanciation de la classe $objet = new uneClasse(); ?>
Constructeur/Destructeur
L’une des principales nouveautés dans la POO avec PHP est l’introduction de méthodes réservées au constructeur et destructeur. Un objet se construit, s’utilise puis se détruit.
Ces méthodes réservées servent donc à construire et détruire l’objet.
Constructeur
Lors de l’instanciation de l’objet, la méthode réservée __construct() est automatiquement appellée.
Cependant, dans un soucis de compatibilité descendante, l’ancienne méthode est toujours supportée. Si la méthode __construct() n’est pas définie, PHP recherchera un constructeur portant le même nom que la classe.
L’un des principaux avantages de cette nouvelle méthode réservée, ce que vous n’aurez plus à renommer votre constructeur advenant le fait que vous auriez à renommer votre classe.
Exemple
<?php // Définition d'une classe class uneClasse { public $propriete; function __construct() { $this->propriete = 'Valeur'; } } // Instanciation de la classe $objet = new uneClasse(); echo $objet->propriete; ?>
Destructeur
PHP5 introduit le destructeur de classe. Ce destructeur se charge d’exécuter certaines opérations lors de la destruction de l’objet. Il vous permet de fermer une connexion ou un fichier automatiquement à la fin de l’exécution d’un script.
La méthode réservée __destruct(), utilisez pour définir un destructeur, sera automatiquement appellé à la fin de votre script par le gestionnaire de mémoire de PHP lors de la vidange des mémoires.
Vous pouvez librement appeller le destructeur à l’intérieur de vos scripts, cependant la mémoire attribuée à votre objet ne sera libérée qu’à la fin de votre script.
Exemple
<?php // Définition d'une classe class fichier { public $res; function __construct($filename) { $this->res = fopen($filename, 'r'); } function read() { if ( feof($this->res) == FALSE ) { return fgets($this->res); } else { return FALSE; } } function __destruct() { fclose($this->res); } } // Instanciation de la classe $fp = new fichier('bidon.txt'); echo '<pre>'; while( $l = $fp->read() ) { echo htmlspecialchars($l); } echo '</pre'.'>'; ?>
Comme vous avez pu le remarquer, le fichier n’est pas fermé lors de l’exécution normale du script. Cependant, il le sera automatiquement à la fin compte tenu de notre destructeur qui s’occupe de la fermeture de celui-ci.