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

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

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    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 éclairé
    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
    Points : 708
    Points
    708
    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 éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    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 !
    Pourfendeur de singletons en croisade

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

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    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 actif
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2006
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2006
    Messages : 215
    Points : 256
    Points
    256
    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 éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    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 expérimenté
    Avatar de guitou12
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 077
    Points : 1 561
    Points
    1 561
    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

  8. #8
    Membre éclairé
    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
    Points : 708
    Points
    708
    Par défaut
    jette un oeil à ça http://mbaron.developpez.com/javase/java/ page 146
    Dia [ Page DVP ] [ Site pro ]

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

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    Merci pour le lien, mais le PHP et JAVA diffèrent quelques peu dans leur manière de gérer les interfaces.....

    Il faut dire que d'origine, JAVA est Objet.... Ce qui n'est pas le cas de PHP qui commence tout juste à pouvoir se venter de ses qualités Objet !!!

    Mais merci pour votre aide !!!!
    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
    -------------------------

  10. #10
    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 viviboss
    Merci pour le lien, mais le PHP et JAVA diffèrent quelques peu dans leur manière de gérer les interfaces.....
    Ah bon ? Quelles sont les différences ?

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

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    Je parle notamment de leur utilisation ????

    Si j'ai tout faux, rectifiez moi le tire !!!! lol.

    Je crois que je m'emmele un peu les pinceaux. Dans les quelques exemples que j'ai vu ca parrait simple, mais il n'empêche que je n'en vois toujours pas l'utilité....
    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
    -------------------------

  12. #12
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Salut

    Une interface.....C'est une architecture, ce n'est pas une règle de conception, ni une méthode.
    C'est selon comment on envisage la construction d'un produit.

    Tu crées une popup avec des paramétres particuliers (positionnement, contour,drag and drop, croix de fermeture, etc...)
    C'est une interface.
    Tu crées un outil de gestion de ressources complet par exemple.
    C'est une interface.
    Tu crées un formulaire de traitement complexe.
    C'est une interface.

    L'interface, c'est trés subjectif et comprend différents aspects :
    La structure, le graphisme, l'ergonomie, l'interactivité éventuellement (ihm), sa destination, et tout ce que l'on peut envisager et attendre d'un module d'une application web.....C'est un ensemble.

    Un exemple ?
    Tu viens de formuler ta question sur l'interface du forum.

    Je pense qu'au travers de tes différentes remarques que tu te fais une idée opposée de ce que sont réellement les interfaces.
    Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
    C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.

  13. #13
    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
    alain31tl, on ne parle pas ici d'interface graphique

    viviboss, l'utilisation d'une interface est strictement la même en java qu'en php.

    Les interfaces, indépendamment du langage, permette d'appliquer (entre autres) le principe d'ouverture-fermeture (OCP, Open-Close Principle)
    http://en.wikipedia.org/wiki/Open/closed_principle

    Par exemple j'ai une classe A :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class A {
       ...
       function methode() {
          if (c1) {
          }
          if (c2) {
          }
       }
       ...
    }
    Si la condition c1 est vrai, le premier if sera executé
    Si la condition c2 est vrai, le second if sera executé

    Imaginons qu'un troisième cas c3 arrive. Je ne veut pas modifier ma classe parce que je sais qu'elle est stable.
    Je suis bloqué. Une solution est de partir dans cette direction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    interface I {
      function sous_methode();
    }
    class A {
       ...
       var $i; 
       ...
       function methode() {
          $i->sous_methode();
       }
       ...
    }
    A est associé à un objet de type I. Dans notre cas I représente un "cas" ou une "condition".
    Il suffit de faire par la suite :
    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
     
    class C1 implements I {
      function sous_methode() {
         echo "C1 !";
      }
    }
    class C2 implements I {
      function sous_methode() {
         echo "C2 !";
      }
    }
    class C3 implements I {
      function sous_methode() {
         echo "C3 !";
      }
    }
    ....
    Donc il suffit de créer une nouvelle classe pour la greffer à A et on a un nouveau cas sans avoir besoin de casser A.

  14. #14
    Membre éclairé
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Points : 790
    Points
    790
    Par défaut
    Si tu veux un petit exemple d'interface, voilà ce que j'ai fait pour une interface de gestion de cache :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    interface Fireworker_cache
    {
    	public function load();
    	public function unload();
    	public function set_path($path);
    	public function put($hash, $data, $ttl = 0, $timestamp = 0);
    	public function get($hash);
    	public function get_time($hash);
    	public function exists($hash);
    	public function delete($hash);
    	public function destroy($prefix = null);
    	public function list_keys();
    }
    Et ensuite je peux implémenter plusieurs types de cache qui implémentent cette interface. Par exemple j'ai un Cache_eAccelerator implements Fireworker_cache, un Cache_sql implements Fireworker_cache, un Cache_mmcache implements Fireworker_cache, etc ... Chacune de ces classes ayant les méthodes définies plus hauts avec les arguements exacts. Comme ça je suis sur que chacune de mes classe fait ce qu'on lui demande, et je peux switcher sans problème de classe suivant mes besoins et mon architecture.
    Testez le forum Fire Soft Board, un forum libre, gratuit et français.

    Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP.

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

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    Ba ca y est je comprend mieux !!!! En gros, avec une interface je peux faire une "extension" de classe, mais qu'avec des fonctions ou constantes....

    Ensuite, si je veux utiliser l'interface dans n'importe quel autre classe, je l'implemente, en ayant pour restriction : je dois implementer toute fonction de l'interface.....

    Merci pourvos exemples et explications, maintenant je pense savoir m'en servir à bon essient..... Je comprend mieux pourquoi c'est censé remplacer la notion "d'heritage multiple".....

    Merci infiniement à tous !!!! C'est beaucoup plus clair dans ma tête

    PS : donc, MR N, une interface est considéré comme un Objet à part entière ?! (dans ton exemple, tu mets : $i->interface.....) je veux dire, c'est de cette façon qu'on y accède dans une classe ?
    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
    -------------------------

  16. #16
    Membre éclairé
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Points : 790
    Points
    790
    Par défaut
    Bah pour qu'une classe implémente l'interface tu dois faire Cache_sql implements Fireworker_cache dans mon exemple, puis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $cache = new Cache_sql();
    $cache->put('toto', 'tata');
    etc ..

    C'est simplement un modèle imposant aux classes implémentants l'interface, un certain nombre de classe obligatoires avec les arguments donnés.

    Cependant les classes implémentants l'interface peuvent aussi disposer de leur propres méthodes privées bien sur
    Testez le forum Fire Soft Board, un forum libre, gratuit et français.

    Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP.

  17. #17
    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 viviboss
    PS : donc, MR N, une interface est considéré comme un Objet à part entière ?! (dans ton exemple, tu mets : $i->interface.....) je veux dire, c'est de cette façon qu'on y accède dans une classe ?
    Oula, je sens la confusion à plein nez.
    Il faut bien faire la distinction entre instance et classe
    Quand on fait :
    On s'adresse à une instance et on lui demande d'executer une méthode.

    Ensuite les notions de classe, classe abstraite et interface sont équivalentes. Elles permettent toutes trois de définir le "type" d'un objet. Avec l'interface, c'est plus une sorte de contrat qui est établit : je suis assuré que l'objet auquel je fais affaire possèdent bien telle et telles méthodes, sans ce soucier de l'implémentation. J'ai besoin (je = un objet métier) d'un mécanisme de stockage ? Je fais $o->save($data) et je m'abstrait de ce qu'il y a derrière. Ca se trouve se sera stocké en BD, ça se trouve sur Filesystem, ça se trouve sur carte perforée, peut importe, tant que l'objet fournit la méthode save.

  18. #18
    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
    C'est un peut comme un masque. Une préconfiguration. Un gabarit préétablie.
    Dans mon cas j'ai une classe abstraite qui implémente une interface. Les méthodes déclarées dans mon interface ne sont pas déclaré dans ma classe abstraite. Maintenant, lorsque je fais un extends de ma classe abstraite je suis obligé de déclarer les methodes définit dans l'interface. Ainsi je suis sur que je n'oublie pas de déclarer les methodes nécessaire. A savoir que dans ce cas de figure les methodes déclaré dans une interface doivent être protected.
    Comme le Mr N. c'est afin de garantir un ensemble homogène au sein d'une même structure.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  19. #19
    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 berceker united
    Dans mon cas j'ai une classe abstraite qui implémente une interface. Les méthodes déclarées dans mon interface ne sont pas déclaré dans ma classe abstraite. Maintenant, lorsque je fais un extends de ma classe abstraite je suis obligé de déclarer les methodes définit dans l'interface. Ainsi je suis sur que je n'oublie pas de déclarer les methodes nécessaire. A savoir que dans ce cas de figure les methodes déclaré dans une interface doivent être protected
    Sérieux ?! Je ne code pas sous php5 (ouais l'autre il parle d'interface depuis tout à l'heure alors qu'il n'a meme pas php5... la honte...) mais la doc me dit que les méthodes d'une interface doivent être publique

  20. #20
    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.
    Sérieux ?! Je ne code pas sous php5 (ouais l'autre il parle d'interface depuis tout à l'heure alors qu'il n'a meme pas php5... la honte...) mais la doc me dit que les méthodes d'une interface doivent être publique
    Excuse j'ai pas tous précisé.
    Admettons que nous souhaitons rendre obligatoire l'implémentation d'une methode que ne peut être utilisé à l'exterieur de la classe. Il faut la déclarer protected dans l'interface et donc la déclarer aussi protected dans la classe. Idem pour public par contre il n'est pas possible de déclarer une methode private dans une interface.
    Pour le dernier cas je n'ai pas testé mais je ne sais pas s'il est possible de la déclarer private dans la methode qui implémente directement l'interface. Dans mon exemple, j'ai une classe qui hérite d'une classe qui implémente l'interface. Il faut imaginer qu'une interface est une classe d'un type particuler donc elle doit hériter des comportement d'une classe. Idem pour l'abstract.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

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