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] Interfaces : Késako ?


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Par défaut [POO] Interfaces : Késako ?
    Bonjours,

    J'ai beau lire la doc PHP, des livres, etc.... Et la description des Interfaces est somme toute assez sommaire.

    Je vois une certaine utilité d'après description (remplace la notion d'héritage multiple, etc...) Mais comment on s'en sert ????

    Car je ne vois pas l'intérêt au niveau du code, c'est pourquoi je pense me tromper et demande votre éclaircissement :
    Si une classe doit implémenter TOUTEune interface, et doit contenir le code des fonctions de l'Interface, comment fait-on appel aux Interfaces ????

    Auriez vous des exemples comme :trois classe dont une qui doit "hériter" des deux autres (dans ce cas, on doit utiliser lune ou plusieurs Interfaces, non ?)

    Bref, je nage.
    Veni Vidi Vici
    -------------------------
    Mes articles : developpez.com ou bien vbview.net
    -------------------------
    Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
    Et aussi : --> pear_manual_fr.chm!!!

    Ou encore : --> Les tutoriaux & cours PHP de Développez.com
    -------------------------

  2. #2
    Membre émérite
    Avatar de Dia_FR
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2006
    Messages : 512
    Par défaut
    je n'ai jamais eu besoin de m'en servir en PHP mais en Java, une interface te permet de déclarer une collection de méthodes

    une interface n'a pas d'attributs et est complètement abstraite

    une classe abstraite peut implémenter certaines méthodes, et pour d'autres, se contenter de les déclarer alors qu'une interface ne contient pas du tout de code, elle ne contient que la signature des méthodes

    elle est vouée à être étendue par d'autres classes (héritage) qui devront implémenter les méthodes déclarées par l'interface
    peu importe le comportement que l'on donnera, il n'y a que le respect de la signature de la méthode qui compte

    si tu choisis de n'implémenter qu'une partie des méthodes d'une interface dans une classe, cette classe devra être abstraite

    tu peux aussi l'utiliser comme un type et affecter à une référence typée par une interface, toute instance d'une classe étendant l'interface
    admettons que tu as une interface Personnage et une classe Guerrier qui étend Personnage
    tu pourras faire
    Personnage perso;
    Guerrier g = new Guerrier();
    perso = g;


    mais bon, là encore c'est en Java, je sais pas trop ce que ça donne en PHP pasque l'occasion s'est jamais présentée d'utiliser ça
    Dia [ Page DVP ] [ Site pro ]

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Par défaut
    hello,

    Tout d'abord la notion d'héritage multiple est un peu abusive. Tout dépend du type d'interface que tu vas implémenter. Car oui ! Il y a plusieurs types d'interfaces ! Je te rassure c'est pas la peine de te jeter sur les anti-dépresseurs tout de suite

    - 1er type : j'en connais pas le nom donc arbitrairement, du haut de mon ignorance crasse, j'appelerai ça les interfaces prédéfinies (si quelqu'un a mieux à proposer qu'il hurle)
    Ces interfaces sont fournies en standard par la SPL. Elles permettent de rajouter ou modifier les fonctionnalités de tes classes. Par exemple l'interface ArrayAccess qui te permet d'accéder aux membres de tes classes comme s'il s'agissait d'un tableau. pour plus d'infos, en anglais : http://www.php.net/~helly/php/ext/spl/

    - 2eme type: les interfaces utilisateur.
    Là c'est déja plus compliqué d'expliquer leur intéret, donc on va y aller avec des exemples...

    soit une fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function machin( $var ){
    	echo $var->func();
    }
    ce qu'on peut déja voir en lisant le code c'est que la fonction machin est faite pour recevoir un objet, sinon elle plantera. Donc on va typer.
    soit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function machin( Object $var ){
    	echo $var->func();
    }
    Le probleme c'est qu'on ne peut pas être sur que l'objet $var définit une méthode func()... de même, on a prévu d'y passer plusieurs types d'objets.
    la solution serait d'accepter uniquement des objets qui héritent d'une classe dont on est sûr:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function machin( ParentObjectQuiDefinitFunc $var ){
    	echo $var->func();
    }
    le problème est que du coup, on interdit toute autre forme d'héritage à $var, ce qui est un peu c** pour une petite méthode de rien du tout... Donc on va lui préférer l'interface, qui elle nous assure que l'objet $var va définir la méthode func() (sinon ça plantera aussi mais au moment de la définition de la classe, ce qui ne regarde plus la fonction machin en elle même).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function machin( InterfaceQuiDecritFunc $var ){
    	echo $var->func();
    }
    Au final l'objet $var devra implémenter l'interface "InterfaceQuiDecritFunc" qui elle même l'oblige à définir la méthode func(), ce qui permet de plus se poser aucune question au moment ou on rédige la fonction machin.

    J'espere que c'est à peu pres clair comme expliquation

    Bon courage !

  4. #4
    Membre émérite
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Par défaut
    Merci pour vos explication, qui, aussi clairs soient-elles (sérieux merci ) me cassent quelque peux la tête....

    Alors autre question : Se sert-on souvent des Interfaces ?

    Je veux dire, j'ai les notions de POO (algorithmes, intro au JAVA, etc), mais je ne m'en suis jamais servis (par feignantise ?) Quoi qu'il en soit, je m'y met maintenant et comprend bien, d'autant que la POO en PHP, c'est moins traumatisant qu'en JAVA, je peux l'assurer !!!

    Bref, Merci de vos renseignement !!! En ce moment, je m'éclate pas mal avec mes projets en POO !!!
    Veni Vidi Vici
    -------------------------
    Mes articles : developpez.com ou bien vbview.net
    -------------------------
    Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
    Et aussi : --> pear_manual_fr.chm!!!

    Ou encore : --> Les tutoriaux & cours PHP de Développez.com
    -------------------------

  5. #5
    Membre expérimenté
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2006
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2006
    Messages : 215
    Par défaut
    Tu t'en serviras dans des projets un peu plus important, là ou il te faudra être rigoureux dans tes classes

  6. #6
    Membre émérite
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Par défaut
    Lol

    Ne faudrait-il pas être rigoureux dans n'importe quel projet ?
    Veni Vidi Vici
    -------------------------
    Mes articles : developpez.com ou bien vbview.net
    -------------------------
    Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
    Et aussi : --> pear_manual_fr.chm!!!

    Ou encore : --> Les tutoriaux & cours PHP de Développez.com
    -------------------------

  7. #7
    Membre Expert
    Avatar de guitou12
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 077
    Par défaut
    Citation Envoyé par viviboss
    Lol

    Ne faudrait-il pas être rigoureux dans n'importe quel projet ?
    Entre la théorie et la pratique il ya des milliers d'années lumière parfois
    Ex développeur Php / J2EE.
    Actuellement reconverti à SharePoint 2013

    Mon blog SP 2013

Discussions similaires

  1. [PHP 5.3] [POO] Interface pour une variable
    Par max-mag dans le forum Langage
    Réponses: 3
    Dernier message: 01/02/2012, 11h45
  2. Réponses: 15
    Dernier message: 13/11/2010, 15h13
  3. [POO] Interface en php
    Par lepotier dans le forum Langage
    Réponses: 4
    Dernier message: 29/06/2008, 13h25
  4. [POO] Interface ou héritage ?
    Par s.n.a.f.u dans le forum VB.NET
    Réponses: 3
    Dernier message: 17/03/2007, 01h02
  5. [POO] Interface et méthode abstraite en PHP5
    Par Invité dans le forum Langage
    Réponses: 9
    Dernier message: 24/04/2006, 00h54

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