Singleton(s) !

Catégorie : PHP objet | Tag : , , , , , , , ,
Share

Voilà bien longtemps que je n’avais pas fait de billets sur le PHP Objet. A vrai dire, je suis en train d’apprendre la programmation orientée objet en cours (au travers du Java et du C++), donc ça fixe vraiment les idées et permet de comprendre pas mal de petites choses, notamment l’utilité de certaines notions, comme les singletons, qui me paraissaiebt bien douteuse auparavant. Un [singleton|tag:singleton], c’est une classe que l’on ne peut instancier qu’une seulenfois. Par exemple, en cours on a créé une classe liste dont hérite la classe liste vide, et la classe listeNonVide. Clairement, il n’existe qu’une et une seule liste vide (sinon, on ne s’en sort pas), donc cette classe ne peut être instanciée qu’une seule fois, donc c’est un singleton. Je n’ai pas encore trouvé d’exemples plus parlant, par contre sur [Apprendre-PHP|http://www.apprendre-php.com], l’exemple est celui d’une classe PresidentDeLaRepublique qui, en effet, ne peut être instanciée qu’une seule fois) !!Comment faire ? L’idée est la suivante : le constructeur de la classe est [private|tag:private], on ne peut donc instancier la classe en passant directement par lui. Par contre, une variable [static|tag:static] possède un accessor (@@getMachin()@@) qui est [public|tag:public] et qui appelle le constructeur si la classe n’est pas encore instanciée (variable static == null), ou retourne l’instance sinon. En somme, voilà ce que ça donne : /// class Singleton { /** * Variable static valant null si la classe n’est pas encore instanciée * ou contenant l’instance si la classe est instanciée. * On y accède avec self::$_instance */ private static $_instance = null; /** * Constructeur private inaccessible en dehors de la classe */ private function __construct() { // On instancie ce qu’il faut } /** * Accessoir static, donc accessible sans être instancié, renvoyant * l’instance, en la créant si besoin */ public static function getInstance() { if(self::$_instance == null) { self::$_instance = new Singleton(); } return self::$_instance; } } /// Notez qu’en Java ce serait la même chose, mais sans les @@self::@@. %%% Bon, bah voilà, ce n’était pas si compliqué que ça ! !!Pour en savoir plus * [Article sur les singletons en Java|http://smeric.developpez.com/java/uml/singleton/] (Developpez.com) * [Article sur les singletons en PHP|http://www.apprendre-php.com/tutoriels/tutoriel-45-singleton-instance-unique-d-une-classe.html] (Apprendre-PHP)

Les commentaires sont fermés.