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 :

Appel d'une fonction d'un parent [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut Appel d'une fonction d'un parent
    Bonjour

    Si j'ai 3 classes A, B et C avec A <- B -< C , et que je veuille depuis une instance de C, appeler une fonction de A qui est surchargée dans B, est-ce qu'il y a une solution ?

    Plus précisément, voici le code (créé pour l'exemple bien sur)

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    	class A {
     
    		function __construct() {
    			echo "A\n";
    		}
     
    		function truc(){
    			echo __CLASS__."\n";
    		}
     
    	}
     
    	class B extends A{
     
    		function __construct() {
    			parent::__construct();
    			echo "B\n";
    		}
     
    		function truc(){
    			parent::truc();
    		}
     
    	}
     
    	class C extends B{
     
    		function __construct() {
    			parent::__construct();
    			echo "C\n";
    		}
     
    		function truc(){
    			parent::truc();
    		}
     
     
    		function trucA(){
     
    		}
     
    	}
     
    	$c = new C();
    	$c->truc();
    Résultat de l'exécution:

    A
    B
    C
    A

    Normal !

    Mais si dans C, fonction TrucA(), je voulais appeler la fonction Truc de A, possible ou pas ?

    J'ai bien tenté un (A)$this->Truc() mais ça passe pas.
    Il semble que les seuls types types autorisés dans un cast soient les types généraux et le type object.

    Je précise bien sur que je pourrais trouver une autre solution et que cette question n'est là qu'à but d'information et apprentissage

    Je sais que dans d'autre langages, c'est impossible mais comme php
    sait faire beaucoup de choses ...

    Papy !

  2. #2
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Salut,

    Avant même de me poser la question de la faisabilité technique, je me poserais des questions sur le fonctionnel : l'arbre d'héritage ou la surcharge de methodes sont-ils judicieusement définis lorsqu'on se heurte à ce genre de problème ?
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  3. #3
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    Citation Envoyé par s.n.a.f.u Voir le message
    Salut,

    Avant même de me poser la question de la faisabilité technique, je me poserais des questions sur le fonctionnel : l'arbre d'héritage ou la surcharge de methodes sont-ils judicieusement définis lorsqu'on se heurte à ce genre de problème ?
    Ce n'était qu'une question technique et de curiosité. Evidemment, un truc pareil serait assez mal fichu, j'en conviens Je me posais juste la question.

    J'ai tenté un passage de l'objet dans une fonction prenant en paramètre une interface IA implémentée par A mais ça n'a rien donné.

  4. #4
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonjour
    Mais si dans C, fonction TrucA(), je voulais appeler la fonction Truc de A, possible ou pas ?
    En l'occurence, il suffit de faire parent::truc() puisque la fonction truc de B::truc appelle A::truc

  5. #5
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    J'ai bien tenté un (A)$this->Truc() mais ça passe pas.
    Je n'ai pas le loisir de tester, mais une bidouille me vient à l'esprit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class C extends B
    {
        public function truc() { 
            $grandPere = (A)$this;
            return $grandPere->truc();
        }
    }
    Seulement si la méthode intermédiaire de B doit être bypassée, car en l'occurrence la remarque de Thomas était la meilleure.
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  6. #6
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    Bon, je vois que ce n'est pas vraiment possible.
    Encore une fois, c'etait juste une question de curieux, et non un problème réel

    Merci de vos réponses !

    ps: $grandPere = (A)$this; ne fonctionne pas. Apparemment, Php, même 5.3, ne permet de caster autre chose certains types dont le type générique object.

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

Discussions similaires

  1. Appeler une fonction du fichier parent
    Par tourdetour dans le forum Modules
    Réponses: 7
    Dernier message: 23/10/2014, 16h01
  2. Réponses: 2
    Dernier message: 02/12/2009, 11h36
  3. Appel d'une fonction d'une page parente
    Par trach.sam dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/04/2006, 10h52
  4. Appel d'une fonction
    Par jfphan dans le forum ASP
    Réponses: 4
    Dernier message: 14/04/2004, 15h06
  5. A la recherche de l'appel d'une fonction...
    Par karl3i dans le forum C
    Réponses: 3
    Dernier message: 24/09/2003, 12h34

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