cs_dorian91
Messages postés41Date d'inscriptionmardi 3 octobre 2006StatutMembreDernière intervention15 mars 2009
-
29 sept. 2008 à 15:22
xmanoux
Messages postés1Date d'inscriptionmardi 7 octobre 2008StatutMembreDernière intervention 7 octobre 2008
-
7 oct. 2008 à 16:48
Bonjour à tous,
J'ai une petite question pour vous. Je vais vous écrire le code et vous expliquer mon problème
class Test1 extends Test2
{
}
abstract class Test2
{
public static function test()
{
}
}
Mon problème est que j'arrive a appelé la méthode static de Test2 via Test1 avec Test1::test() si je fais un print 'salut'; ça marche.
Ma question est : est ce qu'on peut savoir qu'elle classe a appelé la méthode static test() (dans mon exemple Test1)
Lol je sais pas si j'ai été très clair
Merci d'avance
A+
huberdine
Messages postés158Date d'inscriptionsamedi 8 février 2003StatutMembreDernière intervention17 juin 2010 29 sept. 2008 à 22:28
Salut
Quand tu as plusieurs classes qui héritent d'une même classe parente, tu peux savoir (dans les méthode de la classe parente) quelle classe a appelé la méthode en faisant :
get_class($this)
xmanoux
Messages postés1Date d'inscriptionmardi 7 octobre 2008StatutMembreDernière intervention 7 octobre 2008 7 oct. 2008 à 16:48
Salut dorian,
C'est normal que ça ne marche pas : quand tu accedes à $this, tu es "dans" la classe virtuelle, il te renvoie donc le nom de la classe virtuelle.
Mais ce que tu essayes de faire va "à l'encontre" de la logique de la programmation objet.
tu veux que "function test()" dans test2, aie un comportement différent lorsqu'elle est appellée par test1 sa mère ? Il faut donc que tu la redéfinisses dans test1: cela s'appelle la spécialisation de methodes dans l'héritage de classes.