Cet article est la reprise d'un article de mon ancien blog
Introduction
Avant l'arrivée des classes en PHP, les projets étaient généralement organisés en fonction, ces fonctions (très nombreuses généralement) étaient appelées à différents endroits dans les scripts et les manipulations de variables devenaient rapidement problématique.
Avec l'apparition des classes, le PHP (version 4.jesaisplus) devenait un language orienté Objet et ainsi, permettait d'organiser les scripts de manière plus logique, et surtout plus pratique pour les développeurs, fini le procédural...
Les prémices de l'objet dans le PHP 4 soufrait de plusieurs problèmes pour les personnes acclimatées à la POO : Pas d'héritage, pas de gestion d'accès aux propriétés/métodes, avec PHP 5, tous ces outils sont réunis, et notamment la gestion de l'accès (L'objet de cet article)
L'accès aux membres d'une classe
Attaquons dans le vif et commençons pas écrire la classe qui va nous servir à tester les différents accès possible à nos variables/méthodes de classe :
// ClasseQuiTue.php
class ClasseQuiTue {
public $variablePublic = "Je suis public";
private $variablePrivate = "Je suis private";
protected $variableProtected = "Je suis protected";
// Notre constructeur qui tue
function __construct(){}
}
Accès aux membres public
Les membres public d'une classes sont accessibles partout :
$demo = new ClasseQuiTue(); echo $demo->variablePublic; // Renvois "je suis public"
Accès aux membres private
les membres private ne sont accessibles que dans la classe.
$demo = new ClasseQuiTue(); echo $demo->variablePrivate; // Retourne une erreur fatale
Là l'interpréteur php nous envoi en sortie un message qui ressemble à ça :
Fatal error: Cannot access private property ClasseQuiTue::$variablePrivate in /cheminDuScript/exemple_001.php on line 19
Mais quel interet ??? C'est justement d'éviter que d'autre script tente d'accéder à ces données directement.
Cela permet par exemple, de forcer l'accès à cette donnée par une méthode pour être sur qu'un traitement est fait sur la donnée "brute", voyez l'exemple ci-dessous :
// ClasseQuiTue.php
class ClasseQuiTue {
public $variablePublic = "Je suis public";
private $variablePrivate = "Je suis private";
protected $variableProtected = "Je suis protected";
function __construct(){}
function getVariablePrivate(){
return htmlentities($this->variablePrivate);
}
}
$demo = new ClasseQuiTue();
echo $demo->getVariablePrivate();
Accès aux membres protected
Pour protected c'est un peut le même cas de figure, si l'on tente d'accéder à la donnée en 'live', un message d'erreur s'affiche en sortie :
$demo = new ClasseQuiTue(); echo $demo->variableProtected; // Affiche une erreur fatale
Quel différence entre protected et private me direz vous ! Pour cela nous allons utiliser l'héritage...
Les membres protected ou private
Pour comprendre la différence entre private et protected, créons une sous classe à notre ClasseQuiTue :
class ClasseQuiTue {
public $variablePublic = "Je suis public";
private $variablePrivate = "Je suis private";
protected $variableProtected = "Je suis protected";
function __construct(){}
function getVariablePrivate(){
return $this->variablePrivate;
}
}
class SousClasseQuiTache extends ClasseQuiTue {
function __construct(){}
function accesPrivate(){
echo $this->variablePrivate;
}
function accesProtected(){
echo $this->variableProtected;
}
}
$demo = new SousClasseQuiTache();
echo $demo->accesProtected();
// Affiche "Je suis protected"
echo $demo->accesPrivate();
// Erreur d'accès
Comme je l'ai expliqué plus haut, les variables private sont uniquement accessible dans la classe qui les déclare, d'ou le message d'erreur, par contre les variables protected ont la particularités d'être accessible dans la classe déclarante et dans les sous classe par héritage.
Si vous utilisez l'ancienne syntaxe avec le mot clef var (var $maVariable = "pouet";), cela équivaut à utiliser public
Infos
Php 5 permet, dans le cadre l'accès aux membres d'une classe (méthodes et variables), une gestion assez fine des droits via l'utilisation de public, private et protected...
- Niveau : Initié
- Catégorie : PHP
- Publié le : 24 septembre 2011
- Dernière Mise à jour : 24 septembre 2011
- Notions abordées :
Commentaires
par Sven
le 18 décembre 2011 à 20:12:48
Merci pour l'explication bien pratique ;)
par ar2ons
site : http://arouna.watt.free.fr
le 28 février 2012 à 09:02:57
Merci pour ce petit article très claire et vraiment pratique..
par DjebbZ
le 25 novembre 2011 à 16:46:30
Merci pour cette explication on ne peut plus claire.