Le salon du PHP

<<<12>>>

[Page 2 sur 2 - 19 messages]
Informations Messages

ju2cho7

Avatar de ju2cho7
7342 messages
No-Life
No-Life
AidoCodeur
AidoCodeur
Modérateur
Modérateur

Lien direct Le 02 Juin 2007 à 11h14

Citation de Webdeb73

Ici tu te trouves dans un post particulier qui sert à ajouter des trucs et astuces, cours PHP...


J'avais pas vu ce post, mais je viens de me rendre compte que tu n'as pas bien compris l'utilité de ce topic.
Ce n'est pas un topic [Cours PHP]. C'est un topic qui référencie les erreurs PHP les plus courantes, il n'a pas pour but d'apprendre à coder proprement, mais de résoudre les erreurs........

Nous ne fournissons pas d'aide par MP. ;)
 

Publicité

tunisiano

Avatar de tunisiano
12 messages
Barrette de RAM
Barrette de RAM

Lien direct Le 23 Avril 2008 à 13h10

salut tt le monde
bon je suis peut etre hors sujet vu que je connais pas encore grand chose au php je suis meme nul et je poste presque une année après le post précédent mais je suis passé sur ce topic par hazard et j ai commencer a le lire en m appercevant que bon n ombre d entre vous "pourrissait" le site du zero
moi perso il ya de cela environ 3 semaine j ai tapé sur google ces 2 mots " création site" alors que je n y connaissais rien, le premier référencement etait lesiteduzero.com .... peut etre pas un hazard.
en bon débutant que je suis j ai cliqué sur le lien (a l époque je savais meme pas ce qu etais le html ) et voila apres 3 semaines j'ai mon site de construit (pour la partie html et css ) et je suis pas peu fier du résultat)
alors oui je fais un big up pour le site du zero
ps : ça n engage que moiContent

 

_Ov3rKill_GS

Avatar de _Ov3rKill_GS
108 messages
DVD-RW
DVD-RW

Lien direct Le 16 Janvier 2010 à 10h19

Bonjour à tous et à toutes

Voilà une technique permettant d'éviter de dupliquer une instance d'une classe en php. Ce n'est rien d'autre que le Design Pattern Singleton.

Sans le design pattern singleton, effectuer cette action :

<span class="syntaxhtml"><span class="syntaxdefault"><?php$instance1 </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> new maClass</span><span class="syntaxkeyword">();</span><span class="syntaxdefault">$instance2 </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> new maClass</span><span class="syntaxkeyword">();</span><span class="syntaxdefault">?></span></span>



Aurait créée deux instances différentes de la classe.
Il vous est peut-être déjà arrivé d'avoir besoin d'utiliser plusieurs fois une instance d'une classe, sans vouloir en recréer une ? A première vue, ça vous semble impossible ? Et pourtant il existe une solution très facile d'utilisation, il s'agit de créer un singleton.
Le but du singleton est de créer une instance de la classe, si il n'en existe pas déjà une.
Concrètement, ça veut dire que si une instance de la classe existe, elle est retournée, sinon elle est créée. Le résultat est bénéfique car il évite de dupliquer son objet et donc permet l'économie de ressources.

En quelque sorte, si je fais ceci :

<span class="syntaxhtml"><span class="syntaxdefault"><?php$instance1 </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> maClass</span><span class="syntaxkeyword">::</span><span class="syntaxdefault">getInstance</span><span class="syntaxkeyword">();</span><span class="syntaxdefault">$instance2 </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> maClass</span><span class="syntaxkeyword">::</span><span class="syntaxdefault">getInstance</span><span class="syntaxkeyword">();</span><span class="syntaxdefault">?></span></span>



et que je compare $instance1 et $instance2, j'aurai un résultat identique, c'est pas dire que $instance2 aura la même instance que $instance1.

Passons maintenant au code :

<span class="syntaxhtml"><span class="syntaxdefault"><?phpclass maClass </span><span class="syntaxkeyword">{</span><span class="syntaxdefault">    </span><span class="syntaxcomment">// Contient l'instance de la classe maClass</span><span class="syntaxdefault">    private static $_instance</span><span class="syntaxkeyword">;</span><span class="syntaxdefault">        </span><span class="syntaxcomment">// Singleton</span><span class="syntaxdefault">    public static function getInstance</span><span class="syntaxkeyword">()</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{</span><span class="syntaxdefault">        </span><span class="syntaxcomment">// Si l'instance de la classe n'existe pas déjà</span><span class="syntaxdefault">        if</span><span class="syntaxkeyword">(!isset(</span><span class="syntaxdefault">self</span><span class="syntaxkeyword">::</span><span class="syntaxdefault">$_instance</span><span class="syntaxkeyword">))</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{</span><span class="syntaxdefault">            </span><span class="syntaxcomment">// On la créée</span><span class="syntaxdefault">            self</span><span class="syntaxkeyword">::</span><span class="syntaxdefault">$_instance </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> new self</span><span class="syntaxkeyword">();</span><span class="syntaxdefault">        </span><span class="syntaxkeyword">}</span><span class="syntaxdefault">                </span><span class="syntaxcomment">// On retourne l'instance</span><span class="syntaxdefault">        return self</span><span class="syntaxkeyword">::</span><span class="syntaxdefault">$_instance</span><span class="syntaxkeyword">;</span><span class="syntaxdefault">    </span><span class="syntaxkeyword">}}</span><span class="syntaxdefault">?></span></span>


Le code étant commenté, je ne m'attarde pas plus dessus, vous devriez être capable de le comprendre.

Maintenant, c'est à vous de rajouter vos méthodes comme vous l'auriez fait pour une classe sans le singleton. Pensez cependant à instancier votre classe de cette façon :

<span class="syntaxhtml"><span class="syntaxdefault"><?phpmaClasse</span><span class="syntaxkeyword">::</span><span class="syntaxdefault">getInstance</span><span class="syntaxkeyword">()-></span><span class="syntaxdefault">methode</span><span class="syntaxkeyword">();</span><span class="syntaxcomment">// ou si vous le souhaitez :</span><span class="syntaxdefault">$instance </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> maClasse</span><span class="syntaxkeyword">::</span><span class="syntaxdefault">getInstance</span><span class="syntaxkeyword">();</span><span class="syntaxdefault">$instance</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">methode</span><span class="syntaxkeyword">();</span><span class="syntaxcomment">// Mais pourquoi stocker l'objet dans une variable si on peut l'utiliser co mme ça ? (en plus ça prendre plus de place..)</span><span class="syntaxdefault">?></span></span>



Bref j'espère que j'ai été clair dans mes propos.

Bonne journée.

PS : Pour plus d'informations, merci de créer un nouveau sujet plutôt que de répondre dans celui-ci.

 

tramb01

Avatar de tramb01
1 message
Neurone isolé
Neurone isolé

Lien direct Le 09 Juin 2017 à 05h10

Réservé pour une éventuelle prochaine mise à jour.









____________________________________________________________________
Caméra intra orale | Micromoteur

 

<<<12>>>

[Page 2 sur 2 - 19 messages]