Comment utiliser le pattern Singleton en PHP avancé

fermer la fenetre

Des Applications Performantes Sans Vous Prendre La Tête !

Recevez la formation "Développement Facilte" GRATUITEMENT
Avec tous les Codes Sources Commentés
 
(Les événements, la programmation orientée objets, les modèles de conception, Les éditeurs, les outils, 
l'efficacité, CSS3, HTML5, JavaScript, jQuery, Dojo...)

Renseignez votre prénom et votre adresse email ci-dessous :

Découvrez les modèles de conception dans ce nouveau cours consacré au développement avancé en PHP 5 et HTML 5.

Vous allez voir comment utiliser des organisations particulières de classe pour sécuriser votre développement.

Tout est dans la vidéo ci-dessous.

[ppmaccordion][ppmtoggle title=”Afficher le texte de la vidéo”]

Comment utiliser le pattern Singleton en PHP avancé

Bonjour à tous et bienvenu sur Développement Facile.

Dans cette nouvelle vidéo consacrée au développement avancé avec PHP 5, en combinant PHP 5 et HTML 5, vous allez découvrir les modèles de conceptions, comment utiliser des organisations de classes, des façons de penser, des algorithmes qui ont été pensés par des experts en développement qui ont été testés et éprouvés dans des applications de la plus simple à la plus complexe, donc c’est ça les modèles de conceptions, c’est un ensemble de classe, une façon de penser et d’organiser son application, vous allez profiter de toute la connaissance de ces experts en développement grâce au modèle de conception et les réutiliser. Aujourd’hui vous allez découvrir un des modèles de conceptions les plus simples, le singleton qui est énormément utilisé dans les applications c’est partit.

Les modèles de conception

Quels sont les avantages du singleton ?

Comme je vous le disais vous voyez ça s’affiche sur votre écran, les modèles de conceptions c’est des méthodes de développement qui permettent de répondre de manière fiable à des problèmes récurrents, sur un modèle de conception, ça ne fait pas référence à un langage particulier, une fois que vous connaissez les modèles de conceptions vous pouvez les appliquer à n’importe quel langage objet, les utiliser c’est ça qui est génial, vous apprenez les modèles de conception une seule fois et vous pouvez les réutiliser dans plusieurs langages, vous allez apprendre la manière de concevoir votre code, d’organiser votre application.

Les modèles de conceptions permettent entre autre, d’apporter des réponses éprouvées à des problèmes de développement récurrent, de mettre en œuvre un développement établi avec des règles généralisées qui ont fait leurs preuves, de permettre une meilleure compréhension du code par les autres développeurs sur un même projet, c’est à dire que vous pouvez travailler en équipe si vous avez utilisé des modèles de conceptions, un développeur qui n’était pas dans le projet, il va appréhender beaucoup plus rapidement, beaucoup plus facilement le code du projet pour le faire évoluer et les modèles de conceptions permettent de réduire très fortement la complexité d’un projet en apportant des réponses déjà préétablies à un certain nombre de problèmes qui reviennent souvent. Ça se trouve aujourd’hui vous employez des modèles de conceptions sans vous en rendre compte, à travers plusieurs cours sur PHP avancé vous allez découvrir les modèles de conceptions les plus utilisés et peut-être à ce moment-là faire un rapprochement avec votre développement que vous utilisiez des modèles de conceptions, déjà, que vous en connaissez certains. Comme je vous le disais la création des modèles de conceptions viens de plusieurs années d’expérience de développeurs qui ont été confrontés à ces problèmes déjà, les problèmes que vous rencontrez, d’autres développeurs les ont déjà rencontrés et au fil du temps ils ont développé des solutions, des réponses à ces problèmes et donc les modèles de conceptions ou design patterns c’est simplement un formalisme, une mise en forme de ces différentes solutions. Bien évidemment il existe une multitude de modèles de conceptions, dans les prochains cours vous allez en découvrir quelques-uns parmi les plus courants, ça va être difficile de tous vous les présenter surtout qu’ils y en a qui sont très peu utilisés ou dans des cas très spécifiques, donc je préfère vous présenter les modèles de conceptions qui vont vous servir dans 95 % des cas, ceux que vous allez retrouver le plus souvent.

Le modèle Singleton

Alors c’est parti je vous l’avais promis en tout début de ce cours, le modèle de conception singleton, c’est le plus couramment utilisé en développement, c’est le plus simple à mettre en œuvre car il permet de limiter l’instanciation d’une classe à une seule et unique occurrence, vous avez une classe, en principe une classe vous pouvez l’instancier plusieurs fois, avec le modèle de conception singleton cette classe, vous pourrez l’instancier une seule fois, et quand vous serez plus tard dans le code de votre application, en ré instanciant cette classe, vous allez récupérer l’objet déjà créé, c’est ça qui est génial, ça peut être très intéressant, par exemple, pour la configuration d’une application, vous avez un objet config, et donc vous créez un singleton, cet objet config chaque fois que vous mettez à jour la configuration de votre application suite à des actions de l’utilisateur, n’importe où ou vous êtes dans votre application vu que vous l’avez déjà instanciée, chaque fois que vous ré instanciez cette classe config singleton, vous récupérez votre objet avec tous vos éléments déjà mis à jour, c’est assez génial, comme ça avec singleton vous êtes certains d’avoir une seule et unique occurrence de votre classe singleton, donc le principe de la mise en place singleton, c’est de restreindre l’accès au constructeur, vous passez le constructeur en privé, il n’est pas possible d’instancier la classe en faisant new config, par exemple non vous allez déléguer la construction d’un objet à une méthode static, et cette méthode statique qui va appeler le constructeur la première fois pour créer l’instance unique de la classe et si vous rappelez cette méthode statique, vous utilisez toujours getInstancConfig, nom de la classe.getInstance méthode statique, getInstance créé une nouvelle instance de la classe si elle n’est pas existante, par contre si l’instance existe déjà au lieu de créer une nouvelle instance elle va vous renvoyer l’instance qui existe déjà, vous allez pouvoir récupérer les propriétés, les paramètres de votre objet configuration.

Pour implémenter un singleton dans une classe, vous avez besoin de déclarer variable statique o instance qui va stocker l’instance unique de la classe, de rendre privé le constructeur et d’implémenter une méthode statique publique getInstance qui va remplacer le constructeur ce sera le nom de votre classe.getInstance et le rôle getInstance c’est de créer l’instance de la classe si elle n’existe pas et dans tous les cas de vous envoyer cette instance, tout simplement.

Exemple pratique

On va voir ensemble un exemple de code source, justement d’une classe config que l’on va passer en singleton et après vous avez, maintenant je vais vous donner des exercices après l’exemple de code source, ça va vous permettre de mieux progresser et de savoir si vous avez compris justement, le principe du cours que je vous explique, donc après l’exemple de code source, ce sera à vous d’améliorer cette classe singleton en créant une classe qui permet de transformer très facilement n’importe quelle classe en singleton, je vous donne un indice, c’est d’utiliser l’héritage d’un singleton, vous avez créé une classe singleton, la classe que vous voulez transformer en singleton vous faites un héritage de singleton, donc ça c’est votre exercice là on passe tout de suite à l’exemple de code source.

Alors voici directement une mise en pratique qui va pouvoir vous servir dans votre développement donc c’est la classe que j’ai fournie, qui fais partit de la stratégie debug avancée avec le programme PHP expert, là je vous là fournit, vous pourrez la réutiliser, en fait ça permet de faire du debug « silencieux », sans gêner l’utilisateur mais avec votre code PHP donc ça va tout simplement écrire votre debug dans un fichier texte que vous pourrez récupérer sur votre serveur comme ça l’application se déroule de manière « normale », parce que si il y a un bug c’est « normal » pour vos utilisateurs, mais vous, vous avez la possibilité d’effectuer du debug derrière et de voir un petit peu ce qui se passe donc ça créé des fichiers de log et pour cela, j’utilise une instance singleton avec la classe débogueur donc on va voir un petit peu là je vous montre le fonctionnement, vous faites un init, ça appelle le constructeur, ça créé votre première instance de la classe, add lock pour ajouter des messages textes, des variables, des objets ce que vous voulez, clear lock ça va effacer le contenu du fichier et output ça va afficher le contenu du fichier dans la fenêtre courante. Voilà vous avez tous ce qui vous faut, alors le constructeur est protégé car on ne peut pas l’instancier depuis l’extérieur, cette classe débogueur sinon ça généré une erreur, c’est pour ça en commentaire, si vous dé commentez cette ligne là, ça va vous générer une erreur et arrêter le code immédiatement voilà, donc le constructeur est bien protégé, pareil pour la méthode close, on la protège et qu’est-ce qu’on fait ? On a la méthode get instance, si l’instance n’existe pas, on la créée new débogueur, et si elle existe on retourne directement l’instance et donc new débogueur ça appelle le constructeur donc l’initialisation pour initialiser notre objet donc c’est des méthodes que l’on appelle directement sur l’instance là, on récupère l’instance après on a des méthodes sur notre objet donc vous appelez les méthodes, initialisation, ajouter, écrire dans le fichier bloc tout simplement, d’effacer le log le fichier de log, et de faire une sortie sur le fichier log, simplement, là on a bien une seule instance qui est créée avec le singleton donc on fait un débogueur nom de la classe, la méthode statique, et donc là, la classe va être instanciée, c’est la première fois et à appelle directement sur l’instance de cette classe donc ici, là on crée l’instance et on renvoie l’instance de la classe donc du débogueur, on appelle les méthodes que l’on veut, message de test, on efface, on affiche le debug, on l’efface le contenu du fichier et on le réaffiche, ça donne ça comme résultat enfaite, je l’ai chargé tout à l’heure l’ancien fichier de log, je recharge, l’ancien fichier de log, le contenu et à chaque fois on laisse, ce qui vous donne fichier log de ce type parce ce qu’on l’a effacé en fait, il y a eu la commande clear log ça efface le contenu du fichier de log, et donc on affiche uniquement le dernier message, donc là on ajoute des messages, on récupère l’ancien fichier log, c’est à dire si je change un paramètre dans init, si je le mets à True on va créer un nouveau fichier de log à chaque fois, donc là on reprend l’ancien, il suffit de mettre ce paramètre True ici, là ce booléen à vrai, à oui pour effacer le fichier de log, il est déjà présent, là il est mis à false c’est pour ça que vous avez l’ancien contenu, le nouveau contenu qui se créé, et là on a fait un clear et on rajoute des informations dedans. C’est très pratique, vous êtes pas obligé de l’afficher si vous ne voulez pas rendre vous debug complètement invisible, vous mettez en commentaire output, les lignes output, du coup quand vous lancerez l’affichage vous n’aurez rien du tout, il y aura l’application qui fonctionnera normalement mais vous aurez du debug de manière invisible directement dans votre fichier de log donc c’est vraiment une mise en œuvre du pattern singleton, du modèle de conception singleton, très pratique et qui va vous être très utile dans le debugs de vos applications.

Votre plan d’actions !

Maintenant c’est à vous de jouer, utilisez le modèle de conception singleton dans vos applications uniquement quand cela est nécessaire, au début quand on découvre les modèles de conceptions on a tendance à user et abuser du singleton, parce qu’il est vraiment très simple à utiliser, très pratique, mais ça ne sert à rien d’en abuser, il y a d’autres modèles de conceptions que vous allez découvrir dans les prochaines semaines qui sont encore plus pratiques et vraiment plus concrets, plus simples, plus rapides à utiliser dans des applications complexes, parce que avec singleton vous aurez trois, quatre singletons différents sur des classes différentes, alors qu’avec un modèle de conception bien spécifique, ça va vous simplifier la vie car vous allez communiquer avec des événements par exemple avec le modèle de conception observer, utilisez le modèle de conception singleton mais uniquement quand cela est nécessaire que vous avez vraiment besoin d’une classe singleton, comme d’habitude sous ce cours vidéo vous retrouverez le code source en téléchargement, si vous avez des questions posez les directement sous cette vidéo l’équipe développement facile vous répondra avec grand plaisir, et je vous invite à regarder la vidéo, au-dessus de moi il y a un lien, une image cliquer ici pour lancer la deuxième vidéo, dans la deuxième vidéo vous allez aller beaucoup plus loin avec le développement PHP 5 avancé, vous aller découvrir tout un tas de modèle de conception, mais non seulement vous allez découvrir et en plus vous aurez des exemples concrets d’utilisations des modèles de conceptions que vous allez pouvoir réutiliser dans vos applications pour développer beaucoup plus rapidement des applications performantes stables et évolutives, vous allez pouvoir développer en équipe, tout cela je vous explique vraiment en détails dans la deuxième vidéo, cliquez simplement sur l’image lancez la deuxième vidéo, donc cliquez sur ce lien, moi je vous retrouve tout de suite dans la deuxième vidéo, à tout de suite.

 

[/ppmtoggle] [/ppmaccordion]

Télécharger l’exemple de pattern Singleton en PHP

Retrouvez le code source commenté de l’exemple d’utilisation du pattern Singleton en PHP

Downloads

  • Singleton - PHP
    Singleton - PHP

    Code source commenté de l'exemple d'utilisation du pattern Singleton en PHP.
    Contient les fichiers :
    - index.php
    - Debugger.php
    - fichier_log.txt
    - site.css

Améliorez cette classe pour créer n’importe quelle classe en Singleton

Utilisez la zone commentaire pour poster vos réponses à l’exercice proposé

Créez des Applications Dynamiques avec la Formation Gratuite PHP Facile !

Des Cours Vidéos avec les Codes Sources
+
Des Stratégies de Développement Agile