|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Futur Membre du Club
![]() Inscription : janvier 2010 Messages : 76 ![]() |
Soit le code suivant :
Code :
appel public : Hello appel abstrait : Hello World Pourquoi dans un cas $pri apparait (appel depuis méthode abstraite de la sous classe) et pas dans l'autre (appel depuis la méthode publique de la surclasse). Il me paraîtrait logique que $pri ne s'affiche nulle part ou encore que le constructeur déclenche une exception puisque par définition $pri est privé et donc non accessible dans la sous-classe. donc... à quoi correspond cet appel $this->prive dans la méthode abstraite ? Je n'ai pas non plus de méthodes magiques! Merci pour les réponses. |
||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Baptiste ROUSSELÉtudiant Inscription : janvier 2011 Messages : 809 ![]() |
PHP est assez libre mais faut pas coder avec les pieds non plus.
Une class abstraite est abstraite ! Donc pas de propriétés si ce n'est des constantes, et pas d'implémentation de méthodes ! Vu que ce que tu as codé n'a pour moi aucun sens, je ne saurais te répondre quand à ce que fait PHP. http://fr.wikipedia.org/wiki/Classe_abstraite
__________________
|
|
|
04
|
|
|
#3 | |
|
Expert Confirmé
![]() ![]() |
Citation:
__________________
# Dans la Création, tout est permis mais tout n'est pas utile... |
|
|
10
|
|
|
#4 |
|
Expert Confirmé
![]() ![]() |
@loustalet
Ton problème vient du fait que ta classe heriteTest ne peut pas avoir accès au membre privé $prive de ta classe abstraite. Donc ton de la classe heriteTest ne définit pas le private $prive de ta classe abstraite
__________________
# Dans la Création, tout est permis mais tout n'est pas utile... |
|
00
|
|
|
#5 |
![]() ![]() Inscription : septembre 2010 Messages : 7 131 ![]() |
pas confondre avec une interface
__________________
http://blog.stealth35.com/ |
|
|
10
|
|
|
#6 | ||
|
Expert Confirmé
![]() ![]() |
Voici comment procéder (une soluce parmi d'autres) :
Code :
__________________
# Dans la Création, tout est permis mais tout n'est pas utile... |
||
|
00
|
|
|
#7 |
|
Membre Expert
![]() Baptiste ROUSSELÉtudiant Inscription : janvier 2011 Messages : 809 ![]() |
Ah oui en effet ! Mea culpa...
J'aurai du prendre un double café ce matin, voilà le second topic où je répond à côté...
__________________
|
|
|
00
|
|
|
#8 | |
![]() ![]() Inscription : septembre 2010 Messages : 7 131 ![]() |
Citation:
__________________
http://blog.stealth35.com/ |
|
|
|
01
|
|
|
#9 |
|
Futur Membre du Club
![]() Inscription : janvier 2010 Messages : 76 ![]() |
Bonsoir,
Merci pour les réponses. J'ai bien compris ce que je faisais ..... et que ce n'est pas à faire... Je connais bien le principe des interfaces et des classes abstraites.... ce qui me surprend c'est que PHP accepte mon code sans broncher..... je ne sais pas où il stocke le $privé de la classe heriteTest....... ... je n'ai pas testé en C++ , java ou C#, mais je suis plus que quasiment certain que ça ne passe pas ! Bon we |
|
|
00
|
|
|
#10 |
![]() ![]() Inscription : septembre 2010 Messages : 7 131 ![]() |
ton niveau d'erreur est au maximum ?
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#11 |
|
Futur Membre du Club
![]() Inscription : janvier 2010 Messages : 76 ![]() |
Je pense que oui, si tu veux, tu peux essayer et me dire si ça fait pareil chez toi.
|
|
|
00
|
|
|
#12 |
![]() ![]() Inscription : septembre 2010 Messages : 7 131 ![]() |
c'est un comportement normale, en héritage t'as accès au proteted mais pas au privé au niveau des méthode
ps : le try ... catch est inutile
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#13 |
|
Futur Membre du Club
![]() Inscription : janvier 2010 Messages : 76 ![]() |
Effectivement j'ai mis le try catch pour voir si...jamais il déclenchait qq chose !
|
|
|
00
|
|
|
#14 |
![]() ![]() Inscription : septembre 2010 Messages : 7 131 ![]() |
ducoup quel est le problème ?
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#15 | ||
|
Futur Membre du Club
![]() Inscription : janvier 2010 Messages : 76 ![]() |
Je ne comprends pas pourquoi dans le code suivant :
Code :
dans la classe héritée ne provoque pas d'erreur, ne renseignepas la propriété privée $priv de la classe mère et du coup, je ne sais pas où est stockée la valeur de cetet variable que j'arrive malgré tout à afficher dans l'instruction Code :
echo "appel abstrait : " . $unObjet->affichageAbstrait(); Code :
echo "appel public : " . $unObjet->afficher(); |
||
|
|
00
|
|
|
#16 |
![]() ![]() Inscription : septembre 2010 Messages : 7 131 ![]() |
fais un var_dump($unObjet); et tu comprendras
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#17 |
|
Futur Membre du Club
![]() Inscription : janvier 2010 Messages : 76 ![]() |
Voici le résultat de var_dump :
object(heriteTest)#1 (3) { ["protege":protected]=> string(5) "Hello" ["prive":"test":private]=> NULL ["prive"]=> string(5) "World" } Si je comprends bien : "Hello" est stocké dans le membre protected "protege" le membre "prive" de visibilité private de la classe "test" est null (je m'en doutais) l'objet heriteTest a généré une variable "privé" et l'a initialisé à "World". Si c'est ça, je m'en doutais, mais je suis plus que surpris que php se génère des données membres quand il ne trouve pas de donnée membre à affecter .... je me trompe ? Merci |
|
|
00
|
|
|
#18 | ||
|
Membre Expert
![]() Baptiste ROUSSELÉtudiant Inscription : janvier 2011 Messages : 809 ![]() |
C'est bien ça. Le code suivant fonctionnerait ainsi :
Code php :
__________________
|
||
|
|
00
|
|
|
#19 |
![]() ![]() Inscription : septembre 2010 Messages : 7 131 ![]() |
c'est bien ça, il a pas accès donc il crée la propriété en public
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#20 |
|
Futur Membre du Club
![]() Inscription : janvier 2010 Messages : 76 ![]() |
Merci pour les réponses.....
Je ne veux pas lancer un nouveau débat, mais.... vive les déclarations explicites de variables, et encore plus++ en poo ! Bonne fin de soirée |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com