j'ai entendu parlé du polymorphisme quelqu'un peut m'expliquer c'est quoi et est ce que on peut le faire en php? et vous pensez quoi de ça???merci d'avance
j'ai entendu parlé du polymorphisme quelqu'un peut m'expliquer c'est quoi et est ce que on peut le faire en php? et vous pensez quoi de ça???merci d'avance
Si je ne me trompe pas le polymorphisme en php n'est utilisé que pour les fonctions et méthode, c'est à dire que si tu as une fonction qui prend pour argument un objet de la classe a et que b descends de a alors tu peux donner comme argument à la fonction un objet de classe b car b ne fait qu'ajouter des attributs méthode par rapport à un objet a (ce qui ne saurait gêner la fonction)
un exemple plutot qu'un long discours:
disons que tu as une application qui a besoin de produire plusieurs format de sortie on va dire txt ou xml. On vois bien que l'implementation est differente mais les fonctionalites sont les memes :
- formater
- afficher
donc on a deux classes, qui ont les memes fonctions et font partie de la meme super-classe. Ce qui sera traduit en langage machine par le fait qu'on aura 1 classe abstraite parent de deux sous classe texte et html.
Donc maintenant comment faire pour utiliser l'un ou l'autre de maniere transparente ?
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 <?php abstract class affichage { protect $contenue = ""; abstract public function formater($chaine); public function afficher(){ echo $this->contenue; } } class texte extends affichage { public function formater($chaine){ $this->contenue .= $chaine."\n"; } } class html extends affichage { public function formater($chaine){ $this->contenue .= $chaine."<br>"; } } ?>
N'oublions qu'elles sont des sous-classe de affichage ... Et c'est la que la malice s'opere
En gros nous allons utiliser cette methode statique qui va nous retourner un objet du type que l'on veux
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 <?php abstract class affichage { protect $contenue = ""; abstract public function formater($chaine); public function afficher(){ echo $this->contenue; } static function set_affichage($type) { return new $type; } } ?>.
une procedure, une variable, une infinite de possibilites. C'est ce qu'on appelle le polymorphisme. Demain tu a besoin de sortir le contenue en xml tu n'as plus qu'a ecrire une class xml et c'est fini.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <?php $element = affichage::set_affichage('texte'); $element->formater(' la version texte'); $element->formater(' elle marche bien'); $element->afficher(); $element2 = affichage::set_affichage('html'); $element2->formater(' la version html'); $element2->formater(' elle marche bien aussi'); $element2->afficher(); ?>
C'est un sujet qui m'intéresse également. Mais pourrais tu revenir un peux sur ce code :
Je dois avouer que je ne comprend pas très bien le fonctionnement.
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 <?php abstract class affichage { protect $contenue = ""; abstract public function formater($chaine); public function afficher(){ echo $this->contenue; } } class texte extends affichage { public function formater($chaine){ $this->contenue .= $chaine."\n"; } } class html extends affichage { public function formater($chaine){ $this->contenue .= $chaine."<br>"; } } ?>
par exemple si j'ai une classe mére télécharger et 3 autres classe filles télécharger sql et télécharger trans téléchar reqest ce que je peux appliqué le polymorph
L'idee c'est d'avoir plusieurs implementation d'une classe dans la meme interface (dans sa definition objet). c'est a dire avec plusieurs classe, structurer a l'identique qui font des choses differentes.
L'interet etant qu'a partir d'une meme procedure (l'appel de classe + appel de methode) on puisse executer plusieurs tache.
on utilise alors une classe abstraite car sa nous permet de forcer la struture des classes (comme une interface) et en meme temps d'implementer les methodes communes (dans ce cas la methode "afficher") et d'abstraire l'appel a ma classe utiliser (la statique "set_affichage"). Le principe derriere c'est le DRY (Don't Repeat Yourself).
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager