[PHP5] ORPHYX PLUGIN SYSTEM

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 4 nov. 2007 à 11:55
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 - 6 nov. 2007 à 13:55
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/44600-php5-orphyx-plugin-system

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
6 nov. 2007 à 13:55
Rhaaaaaaaaaaaaaa !!!!

Ca y est !!!! J'ai compris !!!!

Pfffffffffff... Bon, je mets à jour tout à l'heure :D
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
6 nov. 2007 à 13:24
Bref, enlèves le "!" !! ;-)
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
6 nov. 2007 à 13:23
Lol,

SI je passe $sName, ET que je ne passe pas $sRoot à ta méthode, je me retrouve dans le dernier throw, c'est ça qui me gène :
# # Root not specified, and instance exists
# elseif(!is_null($sRoot) && isset(self::$aInstances[$sName])) {
# return self::$aInstances[$sName];
# }
Tu dis "Root not specified" mais ton code dit le contraire : "!is_null($sRoot)" : "!is_null", pas "is_null", donc quand $sRoot n'est PAS null, donc, quand on l'a spécifié dans l'appel à ta méthode.
On ne rentre jamais dans cette condition, parce qu'elle est identique à la 1ère.
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
6 nov. 2007 à 12:02
@Malalam :
J'ai vraiment du mal à voir ce qui te gêne...

Premier cas : On vérifie que $sName et $sRoot contiennent quelque chose, donc ne sont ni "null" ni ne sont la chaine vide. En toute logique, cela signifie que deux paramètres non vides parce qu'on veut créer une nouvelle instance de pluginManager. On vérifie donc si l'instance existe déjà ou pas. On la crée si besoin, puis on la retourne.

Deuxième cas : le deuxième argument est omis lors de l'appel à getInstance(). Cela se traduit par un appel de la sorte :
pluginManager::getInstance('db');
So le second paramètre ($sRoot) est omis lors de l'appel, il vaut null par défaut. J'aurais pu mettre 'trucmachin' ou 'bidulechose', ça n'eut pas changé grand chose si ce n'est le test ensuite. Si $sRoot vaut null, c'est qu'on l'a volontairement omis lors de l'appel, parce qu'on suppose que l'instance existe déjà, et qu'on se contente de la récupérer.

Je ne vois vraiment pas ce qui te gêne... Si ça te pose toujours problème, je veux bien plus de détails... ;)
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
6 nov. 2007 à 08:05
@neige =>
# Root not specified, and instance exists
elseif(!is_null($sRoot) && isset(self::$aInstances[$sName])) {
return self::$aInstances[$sName];
}

C'est ça que je ne comprends toujours pas :-)
!is_null($sRoot) ça veut dire : si la racine n'est PAS === null, donc si elle est précisée, puisque par défaut dans l'appel de ta fonction elle est à null ?
Donc ce cas-ci, c'est si on passe les 2 arguments.
Dans le premier cas aussi. A mon avis, t'as un "!" en trop, non?
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
5 nov. 2007 à 00:40
Oh ben c'est gentil ça... J'sais plus où m'mettre...

Pour la propreté et la lisibilité, je ne fais que penser en permanence à ceux qui liront le code... C'est pas compliqué en fait.
Bref...

Merci ^^
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
5 nov. 2007 à 00:23
Je me permet d'ajouter un commentaire pour pouvoir noter (c'est chiant ça! ;) )
Donc un 10/10 pour la propreté et l'utilité que cela peut avoir
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
5 nov. 2007 à 00:21
Alors là ...J'adhere et j'adore ! ^^
Voyons que dire...
Après lecture de ton code que je ne peut caractériser que par le terme beau et agréable.
Je demande a voir plus !!! et surtout reste sur ce style de code :)
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
4 nov. 2007 à 12:46
Salut,

Merci pour ton commentaire.

"Quand on passe un nom de plugin et une racine, tu fous ça directement dans tes instances sans vérifier que ce plugin n'y est pas déjà activé. Pourquoi ?"
=> Héhé... Parce que j'ai oublié de faire la vérification :o)

"Et ensuite, tu retournes l'instance seulement si on ne passe pas de nom MAIS qu'on passe une racine. Là encore, que vient foutre la racine au milieu?"
=> Non, c'est le contraire ! Je ne retourne l'instance que si on demande son nom, sans spécifier de racine !
Ta question m'embrouillait, mais tu as du te mélanger les noeils :

public static function getInstance($sName, $sRoot=NULL)

Si on passe un nom en argument, on retourne le pluginManager qui correspond à ce nom. Le chemin, il le connait déjà.
C'est pour ça que j'ai zappé la vérification dont tu soulignes, à juste titre, l'oubli : c'est parce que je considérais (à tort) qu'un pluginManager s'instancie une fois avec les deux paramètres, et qu'après, on en récupère l'instance en n'y passant forcément qu'un seul (le nom). Or, c'est pas sécurisé, parce que je préjuge ainsi que le développeur sera sage et fera bien comme on lui dit.
Je vais donc rajouter ce test cet après-midi.
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
4 nov. 2007 à 11:55
Hello,

je tâcherai de tester ça. Mais après avoir parcouru ton code, j'aimerais une petite explication sur pluginManager::getInstance() que je trouve curieuse (comme méthode).
Quand on passe un nom de plugin et une racine, tu fous ça directement dans tes instances sans vérifier que ce plugin n'y est pas déjà activé. Pourquoi ? Et ensuite, tu retournes l'instance seulement si on ne passe pas de nom MAIS qu'on passe une racine. Là encore, que vient foutre la racine au milieu?
Sinon c'est joliment codé, déjà :-)
Rejoignez-nous