Classes, héritages, __construct [Résolu]

Signaler
Messages postés
57
Date d'inscription
vendredi 21 mai 2004
Statut
Membre
Dernière intervention
28 juillet 2006
-
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
-
Bonjour,



D'abord une petite mise en situation:



J'ai deux classes: "class_a" et "class_b".

class_b est l'extension de class_a.



class class_a {}

class class_b extends class_a {}



Je souhaite que lorsque l'on crée un objet de type class_b ca appelle
une fonction de class_a sns l'appeller explicitement. Je pensais que
lorsque l'on creait un objet de type class_b ca appellait la fonction
__construct de la class class_a. Mais ce n'est pas le cas. Y a t il un
autre moyen de le faire sans appeller explicitement une fonction? Ce
qui serait relativement penible car j'ai beaucoup d'extensions de cette
classe alors...





Merci d'avance.

Thomas.

13 réponses

Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
parent::__construct pour appeler un constructeur parent.

Y'a pas d'autres moyens :)
Messages postés
57
Date d'inscription
vendredi 21 mai 2004
Statut
Membre
Dernière intervention
28 juillet 2006

Raaaaa



C'est assez contraignant tout de meme...



Merci quand meme :]
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Salut,



pour PHP 4 :



<?php

class class_a

{

function class_a()

{

echo 'class_a
';

}





}

class class_b extends class_a

{



function class_b()

{

$this->class_a();

echo 'class_b
';

}

}



$classe_b=new class_b;



?>

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
57
Date d'inscription
vendredi 21 mai 2004
Statut
Membre
Dernière intervention
28 juillet 2006

Heu oui mais la tu l'appelles explicitement la fonction "$this->class_a();" donc ca m'aide pas :)
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
J'ai pas bien dû comprendre ton problème alors...



"ca appelle une fonction de class_a sns l'appeller explicitement"



Bah soit tu l'appelles soit tu l'appelles pas... si tu pouvais être plus clair stp ;-)

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
57
Date d'inscription
vendredi 21 mai 2004
Statut
Membre
Dernière intervention
28 juillet 2006

Quand tu crees un objet ca appelle la fonction __construct() de
l'objet. Tu ne l'as pas apelle explicitement pourtant puisque tu n'as
pas tapé $monobject->__construct(). C'est ca appeller explicitement
ou implicitement une fonction. Dans le cas de __construct c'est
implicite.
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
C'est bien ce que je dis, tu ne peux pas appeler explicitement un constructeur parent :)



C'est juste une ligne à rajouter, y'a rien de très dur la dedand =)
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Ah oki, tout à fait tu ne peux pas, il faut l'appeler explicitement ;-)
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Hello,

et puis si ca appelait le constructeur parent implicitement, je te dis pas la merde : et si tu veux un constructeur légèrement différent pour ta classe qui hérite ?
Messages postés
57
Date d'inscription
vendredi 21 mai 2004
Statut
Membre
Dernière intervention
28 juillet 2006

Si le __construct du parent remplacait celui de lextension mais si les deux s'executaient il n'y aurait pas de pb.
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Heu, perso, je n'aimerais pas qu'en appelant 1 méthode, 2 s'éxécutent en simultannée...
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
C'est clair ;-)
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
bah ...

un parent::__construct() marche très bien si tu veux appeler un constructeur :o