8791 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Je me pose une question sur l'héritage de classes en PHP.
Est'il normale que les attributs de la classe mère (déclarés private) ne soient pas visible directement,
ex :

$this->monAttribut;


dans la classe fille ?

Merci d'avance pour vos réponses. Smiley biggrin Smiley biggrin Smiley biggrin

Tom
Modifié par erehcab (11 Oct 2007 - 17:16)
L'attribut est déclaré Private


class MaClass {
   private $monAttribut;
   .
   .
   .
}

class MonAutreClass extends MaClass {
   function affAttributClassMere () {
      print $this->monAttribut;
   }
   .
   .
   .
}


Donc je suppose que si je veux directement faire appel à un attribut de la classe mère sans passer par un accesseur il faut que je le déclare Protected ?
Modifié par erehcab (11 Oct 2007 - 15:25)
Je viens d'aller voir mais rien ni fait. J'ai essayé avec :

self::$this->monAttribut


et aussi avec :

parent::$this->monAttribut


et ca ne marche pas.
Par contre lorsque je déclare l'attribut protected il n'y a aucun problème (ce qui parait normale).

Je pensais que lorsqu'une classe héritait d'une autre on pouvait accédder directement aux attributs de la classe mère dans la classe fille sans passer par des accésseurs.
Modifié par erehcab (11 Oct 2007 - 16:29)
Bonjour,

c'est tout à fait normal. C'est en fait la définition même de la portée "private": l'attribut/méthode est accessible uniquement par la classe qui le déclare. Pour rendre un attribut/méthode accessible aux classes filles il faut utiliser "protected".

Il n'y a effectivement pas besoins d'utiliser l'operateur parent:: pour un attribut/méthode hérité sauf si celui-ci est redéfini dans la classe fille (surcharge).
Modifié par Necromantik (11 Oct 2007 - 17:14)