Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/11/2010, 14h43   #1
Membre régulier
 
Inscription : octobre 2010
Messages : 252
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 252
Points : 92
Points : 92
Par défaut Initiation à l'héritage, question technique

Bonjour,

J'aimerais réaliser mon premier héritage, j'ai comprit le principe mais dans mon cas je ne sais pas trop comment faire:

J'ai un constructeur dans ma class parent qui initialise des variable et une fonction qui les traite.

La différence avec ma class fille, c'est l'ajout de plusieurs variables, ainsi, elles doivent aussi être initialisés à la création de l'objet, et j'ai besoin de la même fonction que ma class parent, mais avec une ligne de "if/else" en plus pour chaque variable propres à ma class fille.

1 (concernant l'initialisation des variables de la class fille)] Existe t-il un moyen de faire un constructeur propre à ma class fille qui initialise les variable par le constructeur de son père + le sien ou faut-il déclarer toutes les variables à initialiser dans la class parent, quitte à avoir des variables "protected" qui ne lui serve à rien mais seraient utile uniquement en cas de création d'une class fille ?

2 (partage d'une fonction avec un ajout côté filles)] J'utilise une même fonction dans la class parent et la class fille, sauf que la class fille traite les mêmes variable, et 6 en plus propres à elle, dois-je créer deux fonctions de noms différents ? (une dans la class parent et une dans la classe fille), où si je créer une fonction du même nom dans le fils que dans le père, mais avec uniquement la "partie manquante" (les 6 if/else en +) utile uniquement à la class fille, php saura t-il comprendre comment s'y prendre ?

Je suis conscient que mon explication n'est peut être pas facile à comprendre, c'est pourquoi je me ferait un plaisir de répondre à vos questions si vous en avez ! Voici cependant un petit schémas qui vous parlera peut-être plus:
Code :
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
UTILE DANS LE PERE + LE FILS
           public function verif_val($creneau, $attribution)
           {
               if ((!$donnees) AND ($creneau == 'dixhuitavingt'))
			return $this->dixhuitavingt;
		else if (($donnees) AND ($creneau == 'dixhuitavingt'))
		{
			$this->dixhuitavingt = true;
			return $this->dixhuitavingt;
		}
		if ((!$donnees) AND ($creneau == 'vingtavingtdeux'))
			return $this->vingtavingtdeux;
		else if (($donnees) AND ($creneau == 'vingtavingtdeux'))
		{
			$this->vingtavingtdeux = true;
			return $this->vingtavingtdeux;
		}
               UTILE UNIQUEMENT DANS LE FILS (est-ce possible d'ajouter uniquement ce bout de code côté fille en reprenant le même nom de fonction ?)
		if ((!$donnees) AND ($creneau == 'vingtdeuxaminuit'))
			return $this->vingtdeuxaminuit;
		else if (($donnees) AND ($creneau == 'vingtdeuxaminuit'))
		{
			$this->vingtdeuxaminuit = true;
			return $this->vingtdeuxaminuit;
		}
             }
Merci !
student_php est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 14h55   #2
Membre éclairé
 
sébastien courjean
Inscription : novembre 2010
Messages : 204
Détails du profil
Informations personnelles :
Nom : sébastien courjean
Localisation : France, Indre et Loire (Centre)

Informations forums :
Inscription : novembre 2010
Messages : 204
Points : 319
Points : 319
Oui c'est possible, on appelle cela de la surcharge. Tu peux appeler la même méthode de la classe parent avec le mot clé parent et l'opérateur ::
Code :
1
2
3
4
function afficher() {
        parent::afficher();
        // Ton traitement pour la classe fille ...
}
__________________
Sébastien Courjean
Développeur Web
scourjean@cyres.fr
http://www.cyres.fr/
scourjean est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/11/2010, 15h10   #3
Membre régulier
 
Inscription : octobre 2010
Messages : 252
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 252
Points : 92
Points : 92
Ok donc si j'ai bien comprit dans l'exemple ci dessous si je crée un objet de ma class fille, elle initialisera bien les variables de 1 à 8 ?

Code :
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
CLASS DU PERE
class A
{
        private $jour;
	protected $dixhuitavingt;
	protected $vingtavingtdeux;
 	protected $vingtdeuxaminuit;

  public function __construct($jour)
  {
		$this->jour = $jour;
		$this->1 = false;
		$this->2 = false;
		$this->3 = false;
  }
}
CLASS DU FILS FILS
class B extends A
{
        protected $jour;
	private $huitadix;
	private $dixadouze;
	private $douzeaquatorze;
	private $quatorzeaseize;
	private $seizeadixhuit;

  public function __construct($jour) 
  {
                parent::__construct($jour);
		$this->4 = false;
		$this->5 = false;
		$this->6 = false;
		$this->7 = false;
		$this->8 = false;
  }
}
EDIT:
Merci beaucoup ! Tu viens de m'apprendre une nouvelle notion !
student_php est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h27.


 
 
 
 
Partenaires

Hébergement Web