Polymorphisme de méthodes
Résolu/Fermé
Noemie O'connor
Messages postés
78
Date d'inscription
mercredi 27 novembre 2013
Statut
Membre
Dernière intervention
12 novembre 2014
-
1 déc. 2013 à 11:31
JooS Messages postés 2468 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 - 3 déc. 2013 à 17:54
JooS Messages postés 2468 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 - 3 déc. 2013 à 17:54
A voir également:
- Dans le document à télécharger, léa a utilisé 2 méthodes différentes pour centrer le nom des continents. lesquels sont centrés correctement ?
- Clément a partagé le fichier mme bovary. il a écrit des commentaires dans le document. quel est le 2e commentaire ? - Guide
- Telecharger whatsapp pour pc - Télécharger - Messagerie
- Supercopier 2 - Télécharger - Gestion de fichiers
- Gertrude a préparé la liste des affaires à prendre pour l'excursion. juliette a modifié cette liste en utilisant le mode suivi des modifications proposé par le traitement de texte. - Guide
- Comment télécharger une vidéo youtube - Guide
3 réponses
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
1 déc. 2013 à 12:27
1 déc. 2013 à 12:27
Bonjour,
Non, cela n'est pas possible en php.
C'est principalement dû au fait que les variables ne sont pas typées. Du coup, comment distinguer foo($intarg) de foo($strarg) ?
Par contre, on peut attribuer des valeurs par défaut aux arguments, ce qui permet d'obtenir un semblant de polymorphisme :
public function foo($arg1 = "bar"){}
Cette fonction peut s'appeler de deux façons :
foo();
ou
foo("bar2");
Si on l'appelle de la première façon, la variable $arg1 dans le corps de la fonction vaudra "bar".
Xavier
Non, cela n'est pas possible en php.
C'est principalement dû au fait que les variables ne sont pas typées. Du coup, comment distinguer foo($intarg) de foo($strarg) ?
Par contre, on peut attribuer des valeurs par défaut aux arguments, ce qui permet d'obtenir un semblant de polymorphisme :
public function foo($arg1 = "bar"){}
Cette fonction peut s'appeler de deux façons :
foo();
ou
foo("bar2");
Si on l'appelle de la première façon, la variable $arg1 dans le corps de la fonction vaudra "bar".
Xavier
Noemie O'connor
Messages postés
78
Date d'inscription
mercredi 27 novembre 2013
Statut
Membre
Dernière intervention
12 novembre 2014
4
1 déc. 2013 à 12:48
1 déc. 2013 à 12:48
Salut Xavier,
Merci de ta réponse, c'est dommage qu'on est pas (encore) de surcharge en PhP, l'alternative que tu proposes me servira sans doute.
a +,
N.
Merci de ta réponse, c'est dommage qu'on est pas (encore) de surcharge en PhP, l'alternative que tu proposes me servira sans doute.
a +,
N.
JooS
Messages postés
2468
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
228
1 déc. 2013 à 23:09
1 déc. 2013 à 23:09
Salut,
Parfois c'est tout le comportement de la méthode qui change, et non seulement ses paramètres, donc jettes un oeil sur ça, et plus précisément sur runkit_function_redefine qui te permet de redéfinir une fonction.
Je ne l'ai pas essayé, mais j'imagine que c'est possible par exemple d'appeler runkit_function_redefine dans le constructeur afin de redéfinir une méthode héritée.
Jamais essayé, donc aucune garantie que ça fonctionne.
PS : Il faut néanmoins installer l'extension PECL avant de pouvoir utiliser les fonction runkit.
Parfois c'est tout le comportement de la méthode qui change, et non seulement ses paramètres, donc jettes un oeil sur ça, et plus précisément sur runkit_function_redefine qui te permet de redéfinir une fonction.
Je ne l'ai pas essayé, mais j'imagine que c'est possible par exemple d'appeler runkit_function_redefine dans le constructeur afin de redéfinir une méthode héritée.
Jamais essayé, donc aucune garantie que ça fonctionne.
PS : Il faut néanmoins installer l'extension PECL avant de pouvoir utiliser les fonction runkit.
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
3 déc. 2013 à 15:13
3 déc. 2013 à 15:13
Si je peux me permettre, si tout le comportement de la méthode change, c'est que c'est une autre méthode et elles ne devraient pas avoir le même nom. Pour une conception plus « propre », du moins.
JooS
Messages postés
2468
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
228
Modifié par JooS le 3/12/2013 à 17:56
Modifié par JooS le 3/12/2013 à 17:56
Pas tout le temps, si on est dans le même contexte, pourquoi créer une autre fonction !
Il n'y a pas que les paramètres de la méthode qui peuvent changer !
public class Personne { public void sauter() { // Une centaine de lignes décrivant un saut standard } } public class Handicape extends Personne { public void sauter() { // Une ou deux lignes seulement expliquant qu'il est impossible de sauter } }
Il n'y a pas que les paramètres de la méthode qui peuvent changer !