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] A quoi servent les interfaces en php ?


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 99
    Par défaut [POO] A quoi servent les interfaces en php ?
    Bonsoir

    Je comprend pas l'utilité de l'interface.

    A ce que je comprend une interface est une sorte de liste de methode abstraite, que de toute facon il audra redefinir dans les classes.

    Donc a part peut etre au niveau conceptualisation je vois pas l'interet de la chose.

    Mais j'ai sans doute mal compris , quelqu'un pourrait il m'eclairer ? ( avec un exemple si possible?).


    Edit :
    Voir Ici pour la reponse : http://www.developpez.net/forums/d47...es-interfaces/

  2. #2
    mon_nom_est_personne
    Invité(e)
    Par défaut
    tu as raison sur le fait que les interfaces fonctionnellement parlant font rien. Mais elles ont leur importances d'un point de vu conceptuel mais aussi d'un point de vue structurel.

    prenons un exemple simple mais efficace : les musiciens

    Chez les musiciens tu as de tout: des batteurs, des guitaristes, des violonnistes etc... Cependant leur seul point commun c'est de faire du son avec un instrument de musique, tout le reste est different (la facon de jouer, l'instrument lui-meme etc...)

    Mais voila tu est chef d'orchestre et tu veux composer dynamiquement le tiens. Tu sais que les ordres que tu vas donner sont les memes pour tous :
    - Dis-moi le nom de ton instruement
    - Joue de la musique

    Dans ce cas de figure tu vas donc utilise le factory patern pour appeller tes musiciens.

    classe usineAOrchestre

    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
     
    class usineAOrchestre
    {
    private $nombreDeMusicien = 0;
     
    public function appelleUnMusicien(string $nomDuMusicien)
    {
      $this->$nombreDeMusicien++;
      $this->musicien.$nombreDeMusicien = new $nomDuMusicien;
    }
    public function nombreDeMembre()
    {
      return this->nombreDeMusicien;
    }
    }
    listes de action que doivent savoir faire les musiciens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    interface abilitesDesMusiciens
    {
    public function nomInstrument();
    public function joueUnChanson($nomDeLaChanson);
    }
    exemple d'implementation de musicien

    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
     
    class batteur implement abilitesDesMusiciens
    {
    public function nomInstrument(){ echo 'batterie'; }
    public function joueUnChanson($nomDeLaChanson){ echo 'tambourine sur '.$nomDeLaChanson;}
     
    }
     
     
    class guitariste implement abilitesDesMusiciens
    {
    public function nomInstrument(){ echo "guitare"; }
    public function joueUnChanson($nomDeLaChanson){ echo "gratouille ".$nomDeLaChanson;}
     
    }
    tu peux maintenant diriger ton orchestre
    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
     
    <?php
    $orchestre = new usineAOrchestre();
    $orchestre->appelleUnMusicien('batteur');
    $orchestre->appelleUnMusicien('guitariste');
    $nb = $orchestre->nombreDeMembre();
    for($i = 1; $i <= $nb; $i++)
    {
    echo $orchestre->musicien.$i->nomInstrument();
    echo  $orchestre->musicien.$i->joueUnChanson('paint it black');
    }
     
    // mais tu peus aussi faire
     
    echo $orchestre->musicien1->nomInstrument();
    echo $orchestre->musicien2->joueUnChanson('paint it black');
    echo $orchestre->musicien1->joueUnChanson('hightway to hell');
     
    ?>
    grace a ton interface tu es sur que quelque soit la classe que tu instancie tu auras un comportement homogene. Dans cette exemple, si par le suite tu veux garder le meme code mais changer de musicien tu n'auras que tes appelles a changer et ton code marchera tout de meme.
    Dernière modification par mon_nom_est_personne ; 09/09/2008 à 03h56.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 165
    Par défaut
    mon_nom_est_personne excellente explication

  4. #4
    mon_nom_est_personne
    Invité(e)
    Par défaut
    merci beaucoup, je retransmet juste ce que l'on m'a appris.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 101
    Par défaut
    Ds ce cas là (où les classes filles définissent, toutes, les 2 mêmes méthodes car elles leurs sont communes) ne peut-on pas mettre les méthodes ds la classe mère juste en écrivant leur en-tête (prototype) sans leur coder de traitement puis redéfinir ces méthodes ds les classes filles où là on leur coderai un traitement qui serait spécifique a chaque classe fille ?

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 73
    Par défaut
    je me permets de relancer ce sujet car je me pose la même question que tibimac.
    A savoir qu'une classe mère "base musicien" aurait les memes méthodes que l'interface définies dessus, mais en abstrait, obligeraient les classes fille à les définir.
    Aurait on le même résultat au final? je pense que oui, mais à ce moment la, quel est l'avantage des interfaces par rapport aux methodes abstraites d'une classe mère?

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

Discussions similaires

  1. à quoi servent les interfaces ?
    Par pcdj dans le forum Framework .NET
    Réponses: 14
    Dernier message: 03/02/2007, 09h25
  2. [MySQL] A quoi servent les réferences entre les tables??
    Par Alain15 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 18/02/2006, 17h19
  3. A quoi servent les index dans une BDD ?
    Par Melvine dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 25/10/2005, 13h14
  4. [CR 10] A quoi servent les Templates Fields ?
    Par caviar dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 10/11/2004, 11h52
  5. [C#] A quoi servent les interfaces???
    Par sof_nns dans le forum Windows Forms
    Réponses: 8
    Dernier message: 28/10/2004, 21h51

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