|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |||
|
Nouveau Membre du Club
![]() Inscription : février 2009 Messages : 261 ![]() |
Bonjour, je développe une application où j'ai des classes qui héritent d'autres classes.
Sur une de mes classes abstraites, j'ai déclaré une fonction protected mais seulement son entête car elle a deux classes filles qui utiliseront celle-ci, j'ai donc fais comme ceci: Code :
Citation:
|
|||
|
|
00
|
|
|
#2 |
|
Membre éclairé
![]() Inscription : juin 2007 Messages : 337 ![]() |
alors plusieurs choses à voir
1 : écrire Code :
protected function addResult($datas){} cela dit tu ne peu pas utiliser addResult dans Class B , avec une méthode private : soit protected soit public, ou bien inverser le sens de lecture et rendre la fonction dans class A protected et dans Class B private
__________________
Conception / Dev |
|
|
01
|
|
|
#3 | ||||
|
Expert Confirmé
![]() ![]() |
Bonjour,
C'est tout à fait normal. Si tu veux forcer la définition d'une fonction dans une classe enfant il faut la noter abstract, comme ça : Code :
Code :
__________________
# Dans la Création, tout est permis mais tout n'est pas utile... |
||||
|
00
|
|
|
#4 | ||||||
|
Nouveau Membre du Club
![]() Inscription : février 2009 Messages : 261 ![]() |
Citation:
Citation:
![]() Si je te suis rawsrc, il suffit que je mette abstract devant ma fonction de ma class A puis public sur celle de ma classe B et c'est tout? Qu'entends-tu par "conservant son prototype initial"? En utilisant la même entête? |
||||||
|
|
00
|
|
|
#5 |
![]() ![]() Développeuse PHP/Java Inscription : avril 2007 Messages : 3 671 ![]() |
En bref : soit ta fonction est abstraite, et elle doit porter le mot-clé abstract dans sa déclaration et pas de corps, soit elle ne l'est pas et il lui faut un corps de fonction même vide.
Le premier cas est la solution de rawsrc et le 2e celle de ascito. Dans tous les cas, tu ne peux pas diminuer la visibilité d'une méthode héritée. Si elle est "protected" dans la classe mère, elle ne peut être que "protected" ou "public" dans la classe fille, pas private.
__________________
Modératrice PHP Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur) Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) |
|
|
00
|
|
|
#6 | ||||||
|
Expert Confirmé
![]() ![]() |
Citation:
Code :
Citation:
Code :
__________________
# Dans la Création, tout est permis mais tout n'est pas utile... |
||||||
|
00
|
|
|
#7 |
|
Expert Confirmé
![]() ![]() |
Je ne considère pas cela comme très judicieux. Une fonction non abstraite ayant un corps vide relève à mes yeux d'une erreur de conception.
__________________
# Dans la Création, tout est permis mais tout n'est pas utile... |
|
00
|
|
|
#8 | |
![]() ![]() Développeuse PHP/Java Inscription : avril 2007 Messages : 3 671 ![]() |
Citation:
__________________
Modératrice PHP Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur) Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) |
|
|
|
00
|
|
|
#9 |
|
Membre éclairé
![]() Inscription : juin 2007 Messages : 337 ![]() |
Du coup je suis entièrement d'accord avec rawsrc, dans le sens où Les classes abstraites sont à utiliser lorsque qu'une classe mère ne doit pas être instanciée, et ou l'on veut s'assurer que les classes filles contiennent obligatoirement tels ou tels fonctions.
__________________
Conception / Dev |
|
|
00
|
|
|
#10 |
|
Nouveau Membre du Club
![]() Inscription : février 2009 Messages : 261 ![]() |
Ok merci, je vais utiliser la méthode de rawsrc, merci, c'est résolu.
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com