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

  1. #1
    Membre du Club
    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
    Points : 62
    Points
    62
    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 habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 165
    Points : 137
    Points
    137
    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 du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 101
    Points : 51
    Points
    51
    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 du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 73
    Points : 59
    Points
    59
    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?

  7. #7
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

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

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 228
    Points : 4 713
    Points
    4 713
    Par défaut
    Bonjour,
    Tu ne peux hériter que d'un seul objet par contre tu peux passer un contrat(interface) avec plusieurs interfaces
    une interface c'est un contrat pour des fonctionnalités

    cela te permet des type complexes et du partage de responsabilités entre classes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Personne
    Salarié
      Cadre ->interface ->décisionnel
      Cadre ->interface ->bureautique
      Employé ->interface ->bureautique
      PDG ->interface ->décisionnel
     
    NonSalarié ->interface ->bureautique
    -------------
    Ensuite c'est utile pour moins de couplage, plus de souplesse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class EmbaucherPersonnel {
      function FaitPasserTests(décisionnel $toto ){ }
    }
    Ici, on attend un objet Interface "décisionnel"

    si demain j'ai ORDINATEUR ->interface ->décisionnel l'ordinateur va pouvoir "Faire Passer Tests pour embaucher"
    Si j'avais écrit function EmbaucherPersonnel::FaitPasserTests(Salarié $salarié ){ } c'est faux, l'employé ne peut pas !

+ 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