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 :

[POO] PHP 5 : aggregate sans refkit [Tutoriel]


Sujet :

Langage PHP

  1. #21
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    oui oui ça c'est bon j'ai compris. En fait j'essaie de comprendre ton besoin. Ce "Main", c'est qui qui l'instancie et c'est qui qui va lui appeler les méthodes des plugins ?

  2. #22
    Membre régulier
    Profil pro
    CEO
    Inscrit en
    Avril 2002
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : CEO

    Informations forums :
    Inscription : Avril 2002
    Messages : 84
    Points : 74
    Points
    74
    Par défaut
    Oui oui ça c'est bon j'ai compris. En fait j'essaie de comprendre ton besoin.
    Merci


    Ce "Main", c'est qui qui l'instancie et c'est qui qui va lui appeler les méthodes des plugins ?
    L'instanciation se fait par l'utilisateur et le chargement de plugin se fait par sa méthode LoadPlugin().


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    class Main()
    {
        var $name = '';
     
        function loadPlugin(){}
     
        function execute(){}
     
        function setName($name){
               $this->name = $name;
        }
    }
     
    // dans le fichier Mail.class.php
    class Mail()
    {
         function MailWrite() {} 
         function MailSend() {}
    }
     
     
    $m = new Main();
    $m->SetName('Coucou');
    $m->Execute();
     
     
    $m->LoadPlugin('Mail'); // charge le fichier Mail.class.php
    $m->MailWrite();
    $m->MailExecute();

  3. #23
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Qui va faire "new Main()" ?
    Je sais je suis têtu mais si tu as du mal à répondre à cette question, c'est qu'il y a un truc louche dans ta conception non ?

  4. #24
    Membre régulier
    Profil pro
    CEO
    Inscrit en
    Avril 2002
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : CEO

    Informations forums :
    Inscription : Avril 2002
    Messages : 84
    Points : 74
    Points
    74
    Par défaut
    bah c'est l'utilisateur, l'idée c'est davoir un classe qui couvre les besoins principaux puis pour des besoins spécifiques il charge le plugin qui est une extension

    N'hésite pas à me poser des questions si je m'exprime mal

    Merci de ton aide

  5. #25
    Membre régulier
    Profil pro
    CEO
    Inscrit en
    Avril 2002
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : CEO

    Informations forums :
    Inscription : Avril 2002
    Messages : 84
    Points : 74
    Points
    74
    Par défaut
    c'est un peu comme le zend framework qui charge le plugin via la méthode statique loadClass()

  6. #26
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par laurent_h
    c'est un peu comme le zend framework qui charge le plugin via la méthode statique loadClass()
    Zend::loadclass() n'est qu'un 'vulgaire' include, avec quelques vérifs et une gymnastique souple entre le nom de la classe<->nom du fichier de la classe.
    Et un loadclass() permet d'utiliser la classe en instanciant ses objets à part.

    Citation Envoyé par laurent_h
    l'idée c'est davoir un classe qui couvre les besoins principaux puis pour des besoins spécifiques il charge le plugin qui est une extension
    Pourquoi vouloir à tout prix trainer ca sur la meme instance d'un objet, tout le temps ?

    Ajouter/modifier des méthodes dynamiquement dans une classe, c'est incorrect d'un point de vue conception.
    De plus je trouve cela plutot risqué, dans la mesure où l'on perd totallement le fil de qui fait quoi, qui peut faire quoi.

    Et d'un point de vue débugguage, c'est la misère.
    Quant aux fonctions Runkit, elles restent dans un statut expérimental.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $m = new main();
    $m->SetName('Coucou');
    $m->Execute();
     
     
    $m->LoadPlugin('mail');
    $m->MailWrite();
    $m->MailExecute();
    Pourquoi garder ici un seul objet $m et tout lui déléguer à la volée ?
    Il est plus logique point de vue conception de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $m = new main();
    $m->SetName('Coucou');
    $m->Execute();
     
     
    LoadPlugin('mail'); // équivalent à require ('mon_chemin/mail.class.php');
    $n = new Mail();
    $n->MailWrite();
    $n->MailExecute();

  7. #27
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Citation Envoyé par laurent_h
    bah c'est l'utilisateur, l'idée c'est davoir un classe qui couvre les besoins principaux puis pour des besoins spécifiques il charge le plugin qui est une extension
    Attends.... L'utilisateur il fait pas "new Machin()"... L'utilisateur il clique sur des boutons, il appelle des pages via son navigateur, rien d'autre....
    Donc explique nous qu'est-ce qui se passe quand l'utilisateur appelle ton script index.php... Et si tu as un bout de code réel qui instantie Main et qui s'en sert on est preneur.

    De toutes façons à partir du moment où on a une classe qui s'appelle "Main", j'estime qu'il y a un défaut de conception.


    Citation Envoyé par laurent_h
    N'hésite pas à me poser des questions si je m'exprime mal
    J'ai en effet du mal à te tirer les vers du nez...

  8. #28
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 037
    Points
    6 037
    Par défaut
    Je suis daccord avec doctorrock sur le principe ça me parait un peut tordu voir risquer. Dans php il y a pas de notion main. Il y a pas de classe à tous faire. Dans ce genre de cas il faut pas hésiter à revoir ses prétentions à la baisses.

    Pour répondre à Mr. N je crois que quand il parle de l'utilisateur, il parle d'un développeur qui souhaite ajouter un plug in via code pas un utilisateur via l'interface. Il souhaite faciliter l'ajout de plug in dans une application.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  9. #29
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    D'accord, mais alors il faut qu'on parle des mêmes plugins...
    Car pour moi un plugin est une fonctionnalité qu'on peut ajouter/supprimer d'une application sans douleur. C'est à dire que le coeur de l'appli ne devrait pas être modifié si on enlève un plugin.
    Par exemple si j'enlève le plugin Mail, qu'est ce qui va se passer si à quelque part dans le code on appelait $main->MailExecute() ?
    Je sais, c'est une interpretation totalement subjective, mais pour se comprendre il faut qu'on parle de la même chose. Sinon on en finit pas avec un dialogue de sourds. Or là, malgré mes éternelles question sur le pourquoi du comment, je n'ai toujours pas accès à la Vérité

    Donc je dirais que pour répondre à la question initiale : faire de l'aggregation "automatique" est possible techniquement à condition de mouiller sa chemise, mais est signe d'une mauvaise conception de l'application.

  10. #30
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 037
    Points
    6 037
    Par défaut
    Citation Envoyé par Mr N.
    D'accord, mais alors il faut qu'on parle des mêmes plugins...
    Car pour moi un plugin est une fonctionnalité qu'on peut ajouter/supprimer d'une application sans douleur. C'est à dire que le coeur de l'appli ne devrait pas être modifié si on enlève un plugin.
    Par exemple si j'enlève le plugin Mail, qu'est ce qui va se passer si à quelque part dans le code on appelait $main->MailExecute() ?
    Je sais, c'est une interpretation totalement subjective, mais pour se comprendre il faut qu'on parle de la même chose. Sinon on en finit pas avec un dialogue de sourds. Or là, malgré mes éternelles question sur le pourquoi du comment, je n'ai toujours pas accès à la Vérité

    Donc je dirais que pour répondre à la question initiale : faire de l'aggregation "automatique" est possible techniquement à condition de mouiller sa chemise, mais est signe d'une mauvaise conception de l'application.
    Je suis daccord avec toi mais maintenant il savoir de quel point de vu se trouve. Sans douleur pour celui qui veut modifier l'application dans le code ou sans douleur pour celui qui est derriere l 'ecran qu'il ne voit rien de ce qu'il se passe derriere. Seul laurent_h peut répondre.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  11. #31
    Membre régulier
    Profil pro
    CEO
    Inscrit en
    Avril 2002
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : CEO

    Informations forums :
    Inscription : Avril 2002
    Messages : 84
    Points : 74
    Points
    74
    Par défaut
    Bon je crois que je vais faire extends en cascade ,
    car croyais que ce serait plus simple en php 5

    Le probleme est que Mr N a une vision de la poo pure, mon besoin est de faire un mixe entre la poo et du procedurale.

    Mais bon, le moteur zend a changé en php 5.0

    Merci pour toutes ces réponses

  12. #32
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Que ce soit en "poo pure" ou en mixte poo/procedurale ne change rien au problème

  13. #33
    Invité
    Invité(e)
    Par défaut
    L'enrichissement de classes, est une technique très rare, utilisée en particulier dans la programmation d'IA ( notion d'apprentissage ).

    Dans ton cas, ca ne me semble pas adapté. Tu peux tout à fait designer une application sans enrichissement, d'autant que le module sous PHP(5) est experimental.
    Je ne connais pas ton niveau en UML, mais je te conseille d'y faire un tour.
    Avec les (bons) diagrammes UML, associés à une archi MVC, tu fais tout ca, et sans enrichissement dynamique...

  14. #34
    Membre régulier
    Profil pro
    CEO
    Inscrit en
    Avril 2002
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : CEO

    Informations forums :
    Inscription : Avril 2002
    Messages : 84
    Points : 74
    Points
    74
    Par défaut
    un exemple de moteur de template utilisant des plugins tiny but strong

    http://www.tinybutstrong.com/plugins...lp#plugin_html

  15. #35
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Oui on est d'accord sur ce qu'est un plugin alors.
    Les plugins de TBS fonctionne de la façon suivante :
    Il doivent fournir une méthode OnInstall
    et peuvent implémenter d'autres méthodes :
    OnCommand, BeforeLoadTemplate, AfterLoadTemplate, BeforeShow, AfterShow, OnData, OnFormat, OnOperation, BeforeMergeBlock, OnMergeSection, AfterMergeBlock, OnSpecialVar, OnMergeField
    Lors du chargement des plugins par TBS, ils sont stockés dans un tableau.
    Puis par exemple avant de charger le Template, on va appeler la méthode BeforeLoadTemplate sur tous les plugins qui l'implémente.
    (C'est le comportement que j'en déduit après avoir parcouru le code.)

    Donc j'en déduit que le plugin HTML de TBS n'est pas intrusif. Il n'y a pas besoin de modifier le coeur de l'application pour ajouter le fonctionnement du plugin. A la rigueur un require et c'est tout... non ?

  16. #36
    Membre régulier
    Profil pro
    CEO
    Inscrit en
    Avril 2002
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : CEO

    Informations forums :
    Inscription : Avril 2002
    Messages : 84
    Points : 74
    Points
    74
    Par défaut
    Justement, je le faisais à la volée l'extension mais bon, j'ai résolu le problème en faisant des extends en cascade compatible PHP 4 et PHP 5

  17. #37
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 037
    Points
    6 037
    Par défaut
    Citation Envoyé par laurent_h
    Justement, je le faisais à la volée l'extension mais bon, j'ai résolu le problème en faisant des extends en cascade compatible PHP 4 et PHP 5
    Tu utilises des extends en cascade mais est-ce dans une raison logique UML ou pratique ?
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  18. #38
    Membre régulier
    Profil pro
    CEO
    Inscrit en
    Avril 2002
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : CEO

    Informations forums :
    Inscription : Avril 2002
    Messages : 84
    Points : 74
    Points
    74
    Par défaut
    Pratique => compatibilité php 4 et php 5

  19. #39
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 037
    Points
    6 037
    Par défaut
    Citation Envoyé par laurent_h
    Pratique => compatibilité php 4 et php 5
    il est vrai que c'est facile de pluger en faisant des extends même si c'est pas du propre mais si ça marche ainsi personne ne viendra te faire le reproche. Ni vu ni connu j't'embrouille
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  20. #40
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Ou comment faire de l'objet pour de l'objet et non pas pour répondre à un besoin de conception...

    Il ne faut pas oublier que quand on écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class Pomme extends Fruit
    on est alors en mesure de remplacer extends par est un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    une pomme est un fruit
    un employé est une personne
    une voiture est un véhicule
    ...
    ...
    Si on ne peut pas remplacer par est un alors il y a un probleme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    un main est un <plugin>
    n'a aucun sens.
    Par contre "un main utilise un <plugin>" oui.

    Et encore une fois, le nom "Main" est à bannir.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. [POO] PHP 5 - gestion de la persistance
    Par BRAUKRIS dans le forum Langage
    Réponses: 12
    Dernier message: 07/07/2010, 13h34
  2. Réponses: 16
    Dernier message: 06/06/2007, 12h42
  3. Réponses: 2
    Dernier message: 21/10/2005, 11h26
  4. [POO] [PHP 5 CLASSES]Source à part?
    Par Jean_Benoit dans le forum Langage
    Réponses: 3
    Dernier message: 20/10/2005, 11h50
  5. [POO] PHP et la gestion des classes
    Par Acti dans le forum Langage
    Réponses: 7
    Dernier message: 23/09/2005, 00h06

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