IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Reflection en PHP5 -> Système de plugins


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Reflection en PHP5 -> Système de plugins
    Bonjour à tous (..et à toutes, on sait jamais),
    je suis nouveau dans le monde du PHP5 .

    Je suis actuellement en train de développer pour une application personnelle, un petit système de Plugins .
    L'idée est la suivante : Mes "plugins" sont des classes rangées dans un dossier spécifique .

    Au lancement de l'appli. PHP, il y à :
    - récupération de la liste des fichiers du dossier /plugins
    - récupération des noms des classes
    - Vérification de la présence de certaines proprietés dans la classe (exemple : IsPlugin, PluginName, ..etc..) .
    - Construction d'un array renvoyant une collection de Plugins

    J'utilise pour la partie vérification de présence de proprietés, la Reflection,
    à savoir qqchose du genre :

    $R = new ReflectionClass( $class );
    $props = $R->getStaticProperties( );


    Mon problème :
    - J'ai besoin de connaitre la liste de tous les plugins présents dans ce dossier
    - J'ai besoin de savoir, pour chacun, s'il s'agit d'un plugin et implémente certaines fonctions et possède certaines proprietés
    - J'ai besoin d'effectuer ces opérations à chaque chargement de la "page" (de l'appli quo!)

    => Tout ceci fonctionne bien connement, mais j'ai comme l'impression que je m'y prend mal. Car... pour faire de la reflection, il y à nécessité d'Instanciation de toutes les classes, même si je n'ai besoin que de quelques aspects de ces classes . Ce qui, allourdi légerement l'éxécution du code (pour 10 petites classes, ça passe, mais après, j'en doute.) .

    Avez-vous en tête d'autres moyens de parvenir à mettre en place un système de plugins, sans faire tout passer par une BDD .
    J'ai pensé à du XML,stocké soit en BDD soit dans des fichiers, mais je trouve pas ça top : mon but était d'avoir tout dans mes classes .

    Help me

  2. #2
    Membre averti
    Homme Profil pro
    Lead Dev Web
    Inscrit en
    Avril 2005
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Lead Dev Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2005
    Messages : 282
    Points : 390
    Points
    390
    Par défaut
    Faire les tests à chaque chargement de page c'est clair que c'est ENORME .

    Met en cache le tableau de plugin que tu crée. En le sérialisant dans un fichier par exemple .

    Et puis tu créer un pti script d'admin qui te permet d'activer / désactiver des plugins, et de mettre à jour ce fichier de cache ?

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    merci pour ta réponse yannux,
    il est vrai qu'il est bien plus gentil de faire ces bidules qu'une fois et de les stocker qqpart

    J'ai l'impression qu'on peut faire tout n'importe comment en PHP, ... j'ai vu certaines personnes rentrer des infos sur leur module ou plugin, dans du XML, coincé dans des commentaires de la classe .

    Je m'interroge sur le meilleur moyen de le faire .

    Pour moi le but était de donner des infos sur mes plugins, fonctions de mes plugins directement en codant (gain de temps), et d'avoir un mecanisme qui se charge de faire apparaitre les plugins là ou il le faut (admin) .

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Comme dans tous les programmes, le but premier est de parvenir à son but. Le but second est de l'optimiser.
    Donc pour le moment, les problèmes de perf me semble mineure dans ton avancement. A prendre en comtpe, certes, mais il n'est peut être pas nécessaire de tous revoir maintenant, c'est pe un peu tôt.

    Pour ce qui est des plug in diposnibles, rien ne t'empêche d'utiliser un système de cache de fonctions, comme on peut en trouver dans cache_lite (je le cite souvent lui en ce moment).

    Ensuite vis-à-vis de la réflection, je ne sais pas trop ce que tu parcours avec, mais p et qu'une conception plus solide serait plus efficace, il existe lnterfaces, les classes abstraites en php.

    a plus

Discussions similaires

  1. [PHP5] Système de plugin/module
    Par Anified dans le forum Langage
    Réponses: 2
    Dernier message: 26/06/2008, 22h46
  2. Système de Plugins "réutilisable"
    Par mctd02 dans le forum Design Patterns
    Réponses: 2
    Dernier message: 31/10/2007, 17h54
  3. Système de plugins
    Par damien77 dans le forum C
    Réponses: 7
    Dernier message: 22/03/2007, 21h27
  4. création d'un système de plugin
    Par st20085 dans le forum Interfaces Graphiques en Java
    Réponses: 7
    Dernier message: 05/02/2007, 23h37
  5. Ajout d'une commande système à un plugin ?
    Par kafifi dans le forum C++
    Réponses: 11
    Dernier message: 15/07/2006, 17h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo