Page 1 sur 1

[POO] Constructeur parent et constructeur fille

Posté : 17 juin 2008, 11:04
par Bidibule
Bonjour à tous!

Voilà j'ai une question qui me taraude ...

J'ai fait 2 classes :
  • 1 classe-mère Personne qui prend 3 arguments (nom, prenom, age)
  • 1 classe-fille Etudiant qui prend 5 arguments (nom, prenom, age, liste_matieres, notes)
Dans mon constructeur parent je mets des valeurs par défaut
__construct($nom = "inconnu", $prenom = "inconnu", $age = "inconnu"){

}
Dans mon constructeur fille j'ai donc
__construct($nom, $prenom, $age,$liste_matieres,$notes){

parent::__construct($nom,$prenom,$age);

}
Et je me suis dit : "Comment je fais pour que mon instance fille (Etudiant) puisse être appelée et avoir des valeurs par défaut comme si je faisais

$personne = new Personne();
$etudiant = new Etudiant();

J'ai essayé en mettant des valeurs NULL ou autre mais ça marche pas ... Est-ce un problème de conceptualisation ou un truc qui m'aurait échappé en POO ?

merci de méclairer ! :wink:

Posté : 17 juin 2008, 11:11
par Hywan
Hey :),

Tout simplement en faisant :
class Etudiant extends Personne {

    public function __construct ( $nom = 'inconnu', $prenom = 'inconnu' … ) {

        parent::__construct($nom, prenom, $age);
    }
}
Il faut bien sûr que les paramètres optionnels soient en dernier. J'entends par là que si $notes est obligatoire, il doit être placé avant $nom et $prenom.

Il n'y a pas de conception particulière ici, à moins que tu te sois mélanger les 0 et les 1 avec l'héritage ?

Posté : 17 juin 2008, 11:21
par Bidibule
Hey :),

Tout simplement en faisant :
class Etudiant extends Personne {

    public function __construct ( $nom = 'inconnu', $prenom = 'inconnu' … ) {

        parent::__construct($nom, prenom, $age);
    }
}
Il faut bien sûr que les paramètres optionnels soient en dernier. J'entends par là que si $notes est obligatoire, il doit être placé avant $nom et $prenom.

Il n'y a pas de conception particulière ici, à moins que tu te sois mélanger les 0 et les 1 avec l'héritage ?
Oki c'est bien ce que je pensais, on doit redéfinir les valeurs par défaut comme pour la classe Paren alors...

pas moyen de se servir de l'initialisation par défaut de la classe mère, faut redéfinir

Posté : 17 juin 2008, 11:30
par Hywan
Si Etudiant avait un constructeur identique à celui de Personne, ça ne servirait à rien de le déclarer, donc on n'aurait pas à réécrire les valeurs par défaut. Mais là, tu réécris le constructeur, il est donc différent pour PHP, il ne peut pas associer les paramètres entre eux, c'est impossible. Ça n'est même présent dans aucun langage :?.

Si ton sujet est résolu, pense à le marquer comme tel avant qu'un modo ne viennent de taper sur les doigts ;-).