De l'usage de plxPlugins->getInstance()
Gari
Member
Bonjour,
Toujours dans ma traque aux instanciations surnuméraires de certains de mes plugins, j'ai découvert que certains plugins font appel à la méthode plxPlugins->getInstance().
En l'occurrence, voici un petit résultat d'une commande de recherche dans mon répertoire de plugins :
Après recherche, cela me semble étrange. En effet, la méthode en question créé une nouvelle instance du plugin, alors même que cette instance existe déjà et est accessible dans plxMotor->plxPlugins (sans avoir besoin de la recréer).
A la place d'utiliser
Toujours dans ma traque aux instanciations surnuméraires de certains de mes plugins, j'ai découvert que certains plugins font appel à la méthode plxPlugins->getInstance().
En l'occurrence, voici un petit résultat d'une commande de recherche dans mon répertoire de plugins :
grep "plxPlugins->getInstance" */*.php
adhesion/form.adherer.html.php:$plxPlugin=$plxMotor->plxPlugins->getInstance('adhesion');
adhesion/form.adhesion.html.php:$plxPlugin = $plxShow->plxMotor->plxPlugins->getInstance('adhesion');
adhesion/form.myaccount.html.php:$plxPlugin = $plxShow->plxMotor->plxPlugins->getInstance('adhesion');
adhesion/form.static_password.php:$plxPlugin=$plxMotor->plxPlugins->getInstance('adhesion');
plxMyContact/form.contact.php:$plxPlugin = $plxShow->plxMotor->plxPlugins->getInstance('plxMyContact');
Après recherche, cela me semble étrange. En effet, la méthode en question créé une nouvelle instance du plugin, alors même que cette instance existe déjà et est accessible dans plxMotor->plxPlugins (sans avoir besoin de la recréer).
A la place d'utiliser
$plxPlugin=$plxMotor->plxPlugins->getInstance($monPlugin);
Ne vaudrait-il mieux pas utiliser :
$plxPlugin=$plxMotor->plxPlugins->aPlugins[$monPlugin];
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
getInstance() ne créer pas une nouvelle instance mais fait appel à l'instance déjà créée car les objets sont sous forme de singleton.
avec la ligne suivante, ça fait référence à l'objet qui va permettre d'accéder à toutes ses variables et méthodes publiques
tandis que la ligne suivante ne fait référence qu'à un tableau
D'un point de vue occupation mémoire dans le 1er cas $plxPlugin pointe vers un objet, dans le second on a une copie d'un tableau, ce qui va dédoubler la mémoire le temps de la durée de vie de $plxPlugins
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
dans PluXML 5.3.1 il y a bien la création d'une nouvelle instance avec "new" dans la méthode "getInstance"
Par ailleurs la commande suivante : ne fait pas référence à un tableau mais à un enregistrement d'un tableau, en l'occurrence, l'instance du plugin qui a été créer au moment de la création du moteur (la méthode __construct du plxMotor fait appel à plxPlugins->loadPlugins() qui effectue toutes les créations d'instance via la méthode plxPlugins->getInstance() et stocke l'ensemble des instances dans le tableau plxPlugins->aPlugins).