Suite à mon billet sur l'intérêt des tests unitaires sur les méthodes privées ou protégées, j'ai eu beaucoup de commentaires au sujet de l'encapsulation et sur sa mise en œuvre.

Récemment, cousin @ub sans bermuda, l'un de mes collègues chez PMSIpilot,  a relancé le débat via un sondage, même si son objectif était plutôt de lancer un débat sur le thème la composition contre l'héritage.

J'ai donc décidé de prendre mon clavier pour à la fois essayer de répondre à ces interrogations et mettre à plat ma propre réflexion sur le sujet.

L'encapsulation, dans le cadre de la POO, consiste dans le fait de masquer à l'utilisateur d'une classe les détails de son implémentation.

En PHP, elle est mise en œuvre à l'aide des mots-clefs private, protected et public, qui sont applicables au choix sur les propriétés d'une classe ou ses méthodes.

Le mot-clef private permet donc très logiquement de masquer à l'utilisateur final les propriétés et les méthodes sur lesquelles il est appliqué, alors que public, à contrario, permet de rendre les éléments sur lesquels il est appliqué totalement accessibles.

Enfin, tout ce qui est protected a un statut particulier, dans le sens ou tout ce sur quoi il est appliqué se comporte comme étant privé pour l'utilisateur de la classe, et comme étant publique dans les classes dérivées.

Lors de la conception d'une classe, le développeur doit donc choisir entre ces différents niveaux de visibilité, et cela à bon escient, car un mauvais choix à ce niveau peut avoir des répercussions parfois très gênantes pour les utilisateurs.

Or, il n'y a aucune règle explicite gouvernant l'utilisation de ces mots-clefs, car elle dépend très étroitement du contexte.