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] polymorphisme avec PHP5


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Inscrit en
    Février 2005
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 192
    Points : 198
    Points
    198
    Par défaut [POO] polymorphisme avec PHP5
    Bonjour,

    Je ne me suis mis à la POO qu'il y a peu, je viens d'essayer le polymorphisme, et forcément, si je viens en parler, c'est que PHP n'aime pas ma technique :-)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class toto
    {
      function la_tete_a_toto($arg1, $arg2)
      {}
      function la_tete_a_toto($arg1)
      {}
    }
    ce qui me donne un très gracieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Fatal error: Cannot redeclare toto::la_tete_a_toto() in le fichier at la ligne
    Quelqu'un pourrait-il m'éclairer de ses lumières ? Qu'ai-je oublié ? Le polymorphisme ne serait pas possible avec PHP 5 ?

    Merci de vos réponses, a+

    mathias

  2. #2
    Membre habitué
    Inscrit en
    Février 2005
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 192
    Points : 198
    Points
    198
    Par défaut
    Bon visiblement ça marche en C++ mais pas en PHP, je savais bien que j'avais lu ça un jour ^^

    Je vais changer le nom de ma fonction, tant pis.

    Si je me trompe et que c'est effectivement possible, n'hésitez pas à m'en faire part

    ++)

  3. #3
    Membre habitué
    Inscrit en
    Février 2005
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 192
    Points : 198
    Points
    198
    Par défaut
    Bon,

    Pour mon problème, je peux utiliser une méthode avec argument par défaut, renvoyant sur l'une où l'autre des méthodes après avoir changé leur nom, c'est moche, mais c'est déjà ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class toto
    {
      function la_tete_a_toto($arg1, $arg2=0)
      {
         if($arg2) self::function la_tete_a_toto_2($arg1, $arg2);
         else self::function la_tete_a_toto_1($arg1);
      }
      function la_tete_a_toto_2($arg1, $arg2)
      {}
      function la_tete_a_toto_1($arg1)
      {}
    }
    J'ai aussi trouvé ceci, qui permet le polymorphisme en fonction du type d'objet reçu en argument :
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
       1. /***************************************
       2. * test le format d'une date JJ/MM/AAAA
       3. ***************************************/
       4.  
       5. function is_date($p) {
       6. if(! ereg("^[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}$",$p))
       7. return FALSE;
       8. else
       9. return TRUE;
      10. }
      11.  
      12. /*******************
      13. * une classe objet
      14. *******************/
      15.  
      16. class OBJET {
      17.  
      18. function OBJET() {}
      19.  
      20. function show($v="") {
      21. if(is_date($v))
      22. $this->showDate($v);
      23. elseif(is_numeric($v))
      24. $this->showEntier($v);
      25. else
      26. $this->showChaine($v);
      27. }
      28.  
      29. function showEntier($v) {
      30. echo "show avec parametre entier</br>";
      31. }
      32.  
      33. function showDate($v) {
      34. echo "show avec parametre date</br>";
      35. }
      36.  
      37. function showChaine($v) {
      38. echo "show avec parametre chaine</br>";
      39. }
      40.  
      41. }
      42.  
      43. /**********************
      44. * Programme Principal
      45. **********************/
      46.  
      47. echo "<HTML>";
      48.  
      49. $obj1 = new OBJET();
      50. $obj1->show("coucou");
      51. $obj1->show(23);
      52. $obj1->show("12/10/2002");
      53.  
      54. echo "</HTML>";
    Ce qui m'amène à une autre question, existe-t-il une fonction permettant de renvoyer la class d'un objet ? Ou doit-on la créer ?

  4. #4
    Rédacteur

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Points : 1 071
    Points
    1 071
    Par défaut
    get_class( $object ) tout simplement

  5. #5
    Membre habitué
    Inscrit en
    Février 2005
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 192
    Points : 198
    Points
    198
    Par défaut
    Merci c'est nickel avec ça, reste plus qu'à trouver le temps de faire un truc propre ^^

    C'est tout de même dommage qu'avec tout ces outils ce soit pas inclu directement dans PHP :s

  6. #6
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 12
    Points : 11
    Points
    11
    Par défaut Probleme polymorphisme
    L'interet du polymorphisme est quand tu as une fonction genre

    void afficher (class * Parente)
    {
    parente->affiche () ;
    }

    et si tu as la hierarchie:

    Parente
    enfant1 enfant2

    avec enfant1 et 2 heritant de Parente

    alors si tu passe enfant1 ou 2 en argument alors ca invoque la methode enfant1 ou celle d'enfant2 automatiquement.

    Donc je ne pense pas qu'en php ce soit reellement possible helas ... avec getclass tu auras une sorte de switch quelque part sur la classe selectionnee qui cassera ton polymorphisme ....

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2010
    Messages : 88
    Points : 49
    Points
    49
    Par défaut
    Ce que tu as essayé de faire (premier post) n'est pas du tout du polymorphisme mais de la surcharge de méthode

    La surcharge n'est pas prise en charge par php (il faut en effet passer par des valeurs par défaut)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] [POO]Problème de polymorphisme avec la méthode ToString()
    Par vmolines dans le forum C#
    Réponses: 5
    Dernier message: 08/02/2012, 00h19
  2. [POO] passer un objet de page en page avec php5
    Par skyangel20 dans le forum Langage
    Réponses: 16
    Dernier message: 30/09/2007, 13h51
  3. [POO] Problème avec $this de PHP4 à PHP5
    Par c4l3m dans le forum Langage
    Réponses: 19
    Dernier message: 16/02/2007, 09h48
  4. [POO] Demande conseils sur la POO avec php5
    Par tigunn dans le forum Langage
    Réponses: 9
    Dernier message: 08/02/2007, 14h44
  5. Réponses: 3
    Dernier message: 23/08/2004, 17h49

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