PHP orienté objet, $this et visibilité (2)
Dans ce second chapitre, nous allons voir ce qu’est la pseudo variable $this et les différentes visibilités
.
La pseudo variable $this
Qu’est-ce donc que $this ?!
$this est une pseudo variable disponible dans votre classe, elle représente l’objet de votre classe. $this contient donc l’ensemble des attributs et des méthodes de votre classe.
Un petit exemple valant mieux qu’un grand discours, voici un cas concret:
1 2 3 4 5 6 7 8 9 10 11 | <?php class myClass { public $attr; public function exemple() { $this->attr = 'coucou'; echo $this->attr; } } |
Dans cette classe, la méthode ‘exemple()’ affecte la chaine de caractère ‘coucou’ à l’attribut $attr et affiche ensuite le contenu. Attention, il ne faut JAMAIS mettre le signe $ après l’opérateur « -> ».
Maintenant, un petit exercice…
Faire une classe nommé myClass contenant :
- un attribut nommé ‘attr’
- une méthode nommée ‘affect’ qui se charge d’affecter une valeur à l’attribut $attr
- une méthode nommée run qui appelle la méthode ‘affect‘ et affiche le résultat
Voici la solution:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php class myClass { public $attr; public function affect() { $this->attr = 'coucou'; return $this->attr; } public function run() { echo $this->affect(); } } ?> |
Et voila
. la méthode ‘run()‘ affiche le résultat de la méthode ‘affect()‘. La pseudo variable $this doit maintenant prendre tout son sens… Dans cet exemple et comme dans les exemples du premier chapitre, les méthodes sont de visibilité ‘public’, un aspect que nous n’avons pas encore vu dans la programmation orienté objet.
Les différents type de visibilités, public, private et protected
La définition bête et méchante:
public: Un attribut ou une méthode de visibilité public est accessible partout.
protected: Un attribut ou une méthode de visibilité protected n’est accessible que au sein de la classe et dans ses classes enfants.
private: Un attribut ou une méthode de visibilité private n’est accessible qu’au sein même de la classe. Tout ce qui est de visibilité private ne sera pas accessible depuis une classe enfant.
Voila la définition des différents type de visibilités. Concrètement, la visibilité est importante dans le cadre de développement d’API mais aussi pour la sécurité de son code.
Reprenons l’exemple ci-dessus, une méthode est chargée d’affecter une valeur à un attribut et une autre méthode chargée d’afficher le résultat de l’affectation. Dans certains cas, il se peut que la valeur de l’affectation soit toujours la même. Dans un cas comme celui-ci, la méthode chargée de l’affectation devrait être de visibilité private.
Ce qui donne donc:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php class myClass { public $attr; private function _affect() { $this->attr = 'coucou'; return $this->attr; } public function run() { echo $this->_affect(); } } ?> |
Dans cette classe, la méthode _affect() ne sera accessible que depuis la classe ‘myClass’, les conditions pour affecter oui ou non la valeur ‘coucou’ à l’attribut $attr devraient être mises dans la méthode run(). Ainsi depuis l’extérieur, seule la méthode run() serait visible et seule la méthode run() décide si oui ou non la valeur est affecté.
J’ai pris par habitude de préfixer d’un underscore mes méthode de visibilité private ou protected, ce n’est bien entendu pas obligatoire. Nous ne verrons pas dans ce chapitre la visibilité protected. Nous verrons ce type de visibilité dans le chapitre sur l’héritage.
Mots-clefs :$this, PHP orienté objet, POO, public et protected, tutoriel PHP orienté objet, visibilité private
Laissez un commentaire