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] class abstraite et methode magic


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut [POO] class abstraite et methode magic
    salut

    je suis desolé de poser cette question

    mais est il logique d'utiliser une methode magis dans une classe
    absraite(comme methode commune et non abstraite biensur)


    est-il possible de connaitre le non de la class fille qui appel la class mere(dans celle ci)

  2. #2
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    mais est il logique d'utiliser une methode magis dans une classe
    Je n'ai pas tout compris la, mais bon peu importe


    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
    <?php
     
    class foo {
       function __construct() {
       // un peu de code
       }
     
       function name() {
           echo "Mon nom est " , get_class($this) , "\n";
       }
    }
     
    class foo_ extends foo
    {
        public function __construct()
        {
     
        }
    }
     
    // create an object
    $bar = new foo_();
     
    // external call
    echo "Son nom est " , get_class($bar) , "\n";
     
    // internal call
    $bar->name();
     
    ?>
    Quelque chose comme cela ?

    Mais bon cela marche juste parce qu'on instancie une foo_.

    bye

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    je mes suis mal exprimer
    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
     
    abstract class AbsctractMetier
    {
    protected $_base;
    	protected $_table;
    	protected $_data;
     
    	abstract protected  function getField();
     
    	public function __construct()
    	{
    		$config = new Config();
    		$config->getConfExtension();
    		$config->getConfFromFile('./config/config.xml');
    		if(!in_array('PDO',$config['extention']))
    		throw new Exception('PDO doit etre installé');
    		if(!in_array($config['MySite']['type'],PDO::getAvailableDrivers()))
    		throw new Exception('driver '.$config['MySite']['type'].' doivent etre installés');
    }
    public function __set($name,$value)
    {
    }
    }

    ma question est : est qu'il est correcte d'avoir un accessor ou un mutator dans une class abstraite(je ne parle pas du fonctionnement mais de modelisation)
    la methode __set sera redefinie dans les class fille.

    et puis pour mon question apparement c'est pas possible car une class abstraite ne peut etre instancier

    merci

  4. #4
    Invité
    Invité(e)
    Par défaut


    euh...

    une classe abstraite ne fait aucun traitement, vu qu'elle n'est jamais instanciée et que ses méthodes n'ont qu'une signature... ton __construct() ne doit pas avoir de corps, tu dois simplement mentionner sa signature...

    quant à l'accessor et au mutator, de toutes façons ils sont définis pour toute classe PHP5... donc pas besoin de les mettre dans ta classe abstraite, sauf si tu veux specifier qu'ils devront obligatoirement etre surchargés

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    quant à l'accessor et au mutator, de toutes façons ils sont définis pour toute classe PHP5
    oui mais je fais des verification commune a toute les class qui herite de celle-ci
    cependant dans la cadre de php5 une classe abstraite peut contenir des methode commune qui effectue du traitement
    quand est il dans d'autre langage

    je sens que ca va se finir en interface tous ca

  6. #6
    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 torvalds17
    :
    une classe abstraite ne fait aucun traitement, vu qu'elle n'est jamais instanciée et que ses méthodes n'ont qu'une signature... ton __construct() ne doit pas avoir de corps, tu dois simplement mentionner sa signature...
    Mais si tu définis une classe fille de ta classe abstraite, elle ne peut pas hériter de son constructeur ? Ce n'est pas parce qu'une classe n'est jamais instancier qu'on ne peut pas mettre de code dedans... Les interfaces sont là pour ça. M'enfin, vu que je connais pas php5, je suis peut-etre à côté de la plaque

  7. #7
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    Ce n'est pas parce qu'une classe n'est jamais instancier qu'on ne peut pas mettre de code dedans...
    +1


    Une classe abstraite n'est abstraite que dès lors que l'une de ces méthodes est définie comme abstraites. Ce qui n'interdit pas d'avoir des méthodes impplémenté dans la classe abstraite.

    Après pour appeler la méthode mère depuis la méthode réimplémenté
    parent::MaFonctionMere(func_get_args());

    un petit tour sur php.net nous explicite tout cela très clairement http://www.php.net/manual/fr/language.oop5.abstract.php

  8. #8
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    D'ailleurs vous en pensez quoi de l'utilité des interfaces dans php5 à part pour faire comme sur les jolies dessin de la conception ?

  9. #9
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 265
    Points : 332
    Points
    332
    Par défaut
    Hmmm connaissant un peu Java et UML, c'est utile pour assurer le developpement de "package" inter compatible.

    Qu'en pensez vous ?

  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 ePoX
    D'ailleurs vous en pensez quoi de l'utilité des interfaces dans php5 à part pour faire comme sur les jolies dessin de la conception ?
    Je ne comprend pas la question... Si tu codes depuis des specs, c'est que :
    1. ces specs ne doivent pas être outrepassées (ou ce ne sont plus des specs)
    2. ces specs ont été pondues et murement réfléchies (normalement)

    Donc parler de l'utilité des interfaces en dehors de la conception est un non-sens à mon humble avis.

  11. #11
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    Pour répondre a la question initiale,

    comme l'as dit epox, tu peux tout a fait mettre du code dans certaines methodes qui seront de tout manière héritées.

    En ce qui concerne la question du meme epox sur les interfaces, elles te permettent de rajouter des méthodes a des objets de différents arbres d'héritages afin qu'ils aient quand même un comportement commun.

  12. #12
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    Donc parler de l'utilité des interfaces en dehors de la conception est un non-sens à mon humble avis.
    Oui tout à fait, mais en faits je n'y trouve pas de cas concret ou cela apporte un reel plus.

    Je veux dire par la, et je ne parle que de php5 (pas java ni .net ect), que tu déclares ton interface, tu l'implémentes ici ou la.
    Et puis c'est tout.

    C'est surtout en cela que je me trouve sa un peu bof en php5.

  13. #13
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    je ne voit pas la différence que tu fais entre une interface php5 et une interface java

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    resultat je gard pour l'instant ma facon de faire

    je lit les best practices php5

    et je corrige selon ce que j'aurai compris

    merci

  15. #15
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ePoX
    Ce n'est pas parce qu'une classe n'est jamais instancier qu'on ne peut pas mettre de code dedans...
    +1


    Une classe abstraite n'est abstraite que dès lors que l'une de ces méthodes est définie comme abstraites. Ce qui n'interdit pas d'avoir des méthodes impplémenté dans la classe abstraite.
    oui oui desolé autant pour moi , j'ai confondu classe abstraite et interface...
    une methode de la classe abstraite peut contenir du code si elle n'est pas definie abstract...


    encore sorry

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

Discussions similaires

  1. [POO] Classe abstraite et attributs
    Par Info-Rital dans le forum Langage
    Réponses: 1
    Dernier message: 12/08/2007, 13h28
  2. [POO] classe abstraite sans methode
    Par ZaaN dans le forum C++
    Réponses: 7
    Dernier message: 01/05/2007, 19h21
  3. [POO] Classe abstraite PHP5 et variables membres
    Par Invité dans le forum Langage
    Réponses: 3
    Dernier message: 07/06/2006, 01h27
  4. [POO] class abstraite CRUD & DAO
    Par mazenovi dans le forum Langage
    Réponses: 2
    Dernier message: 13/04/2006, 19h45
  5. [POO] Classes abstraites
    Par GLDavid dans le forum Langage
    Réponses: 12
    Dernier message: 02/03/2006, 11h18

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