Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

[PHP5] ORPHYX PLUGIN SYSTEM


Information sur la source

Catégorie :Class et Objet ( POO ) Classé sous : poo, php5, plugins Niveau : Débutant Date de création : 03/11/2007 Date de mise à jour : 06/11/2007 14:38:12 Vu / téléchargé: 2 675 / 125

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note

Description

Voici un système de plugin pour classes PHP5 (parce que, comme dit Malalam : "ben parce qu'on en est bientôt à PHP6 alors il serait temps d'abandonner PHP4 ! ;-)") qui utilise un peu la SPL (et c'est pas juste pour faire plaisir à Malalam).
Je n'ai par contre aucune idée de la version minimum de PHP qu'il faut... A priori, tant que la SPL est là (et que la classe FilterIterator est définie), y'a pas de raison que ça marche pas.

Le système de plugin est composé de plusieurs classes, mais la seule qu'il soit vraiment utile de connaitre est la classe abstraite plugin, puisque c'est elle que les plugins étendront.

La source est entièrement documentée (en anglais, désolé pour les shakespearophobes) au format phpDoc (http://www.phpdoc.org) et comporte également de nombreux commentaires un peu partout dansle code.

Pour le niveau... Je mets débutant parce que développer un plugin avec ça, c'est pas compliqué (y'a un exemple simple dans la doc), et écrire une classe qui prend des plugins, c'est enfantin.
Par contre, je pense que d'un point de vue didactique (mais peut-on peut dire ça ?), c'est plus niveau initié.

La doc se trouve ici : http://www.orphyx.net/doc/plugin/
Les spécifications et exemples se trouvent dans le fichier README.
 

Conclusion

Ca fonctionne chez moi... J'espère que ça fonctionne partout... hum hum...
N'hésitez pas à commenter, à proposer des améliorations, tout ça...
Si la doc n'est pas explicite, n'hésitez pas non plus.
Je suis un peu perfectionniste dans l'âme, et cette source fait partie d'une application que je développe dans le but de la publier, alors la moindre virgule mal placée mérite d'être corrigée ;)

Voilà...
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

03 novembre 2007 22:42:04 :
- Suppression d'une variable résiduelle qui faisait planter... - Modification du titre de la source
04 novembre 2007 15:46:43 :
2007-11-04 : Version 1.0.1 * pluginAble.class.php pluginAble::$oPlugins visibility is now set to private * pluginAble.class.php Fix : Hook arguments were not passed :/ * pluginManager.class.php Fix : Manage hook arguments correctly * pluginManager.class.php Fix : Check if instance already exists before creating a new one (thanks to malalam) * pluginManager.class.php Add some comments to pluginManager::getInstance() method * pluginManager.class.php method pluginManager::getInstance() is now final
04 novembre 2007 15:48:08 :
2007-11-04 : Version 1.0.1 * pluginAble.class.php pluginAble::$oPlugins visibility is now set to private * pluginAble.class.php Fix : Hook arguments were not passed :/ * pluginManager.class.php Fix : Manage hook arguments correctly * pluginManager.class.php Fix : Check if instance already exists before creating a new one (thanks to malalam) * pluginManager.class.php Add some comments to pluginManager::getInstance() method * pluginManager.class.php method pluginManager::getInstance() is now final
04 novembre 2007 16:11:31 :
J'adore jouer avec les numéros de version, alors voici la version 1.1.0 qui permet de se passer de getPlugin() pour appeler une méthode d'un plugin depuis le script principal et qui corrige des fautes de frappe de la 1.0.1. Le fichier README est mis à jour pour tenir compte de ça.
06 novembre 2007 14:38:13 :
Correction du bug dans pluginManager::getInstance() (merci Malalam)

Commentaires et avis

signaler à un administrateur
Commentaire de malalam le 04/11/2007 11:55:59 administrateur CS

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à :-)

signaler à un administrateur
Commentaire de neigedhiver le 04/11/2007 12:46:26

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.

signaler à un administrateur
Commentaire de Teclis01 le 05/11/2007 00:21:58

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 :)

signaler à un administrateur
Commentaire de Teclis01 le 05/11/2007 00:23:25 10/10

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

signaler à un administrateur
Commentaire de neigedhiver le 05/11/2007 00:40:53

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 ^^

signaler à un administrateur
Commentaire de malalam le 06/11/2007 08:05:21 administrateur CS

@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?

signaler à un administrateur
Commentaire de neigedhiver le 06/11/2007 12:02:32

@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... ;)

signaler à un administrateur
Commentaire de malalam le 06/11/2007 13:23:54 administrateur CS

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.

signaler à un administrateur
Commentaire de malalam le 06/11/2007 13:24:28 administrateur CS

Bref, enlèves le "!" !! ;-)

signaler à un administrateur
Commentaire de neigedhiver le 06/11/2007 13:55:01

Rhaaaaaaaaaaaaaa !!!!

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

Pfffffffffff... Bon, je mets à jour tout à l'heure :D

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

differnec entre php 4 et php5 [ par hardelgylls ] Bonjourpetite question :j'ai passer un oral et l'examinateur m'a demandé quel était la différence entre php4 et php5. et la gros blanc, est ce que qqu Doc PHP5 sniff sniff [ par slhuilli ] Bonjour, Bonsoir,Je suis a la recherche d'un PDF qui recenserait les mots-clefs + explications (bref un bouquin complet) sur PHP 5 qui parait-il est Class POO retourné le nom de l'objet [ par MeTh ] Bonjour,Comment retourné le nom de l'objet déclaré?exemple :$monobjet = new GridR();comment recuperé $monobjet dans ma class?Merci Pb passage PHP4 -> PHP5 [ par Galmiza ] Salut,J'ai acheté un bouquin pour débuter le PHP.J'ai suivi a la lettre les instructions du livre:-installer EasyPHP 1.7-installer PHP 5.0..-lancer Ea Cohabitation PHP4 PHP5 sur même serveur ! [ par Zacland ] Ce n'est pas une question, mais je me doute que certaines personnes veulent essayer de faire cohabiter 2 versions de PHP sur un même serveur Apache... Un caractére se trouve t'il dans ma chaîne... [ par juki_webmaster ] Bonsoir,Je travaille depuis 14h cette apres-midi sur une fonction alternative d'une fonction connu et disponible uniquement sur php5, je fait cette fo PHP5 en PHP3 [ par el shaddai ] J'ai développé une partie de site en PHP5. MAlheureusement , chargé chez FREE, ils n'utilisent que PHP3. Y a t-il une manip simple pour qur du PHP5 pa PHP5 et MySQL 4.1.7 [ par TMT ] J'ai installé PHP5 et MySQL sur mon Windows XP avec IIS. J'ai bien activé le module php_mysql dans le fichier php.ini Là mon problème est qu-à chaque php4 vers php5 [ par aurelielaugraud ] Bonjour, Je suis passée de php4 à php5 pour utiliser la librairie graphique GD. Seulement, un programme que j'avais précédemment faire refuse de fonct Modification d'un script pour conformité avec php4 et/ou php5 [ par christobal ] Bonjour, depuis plusieurs années j'utilise le même script pour mes sites.Maitenant avec les derrnieres version de PHP4 et PHP5 ce script ne


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,421 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.