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 DjebbZ

le 25 novembre 2011 à 16:46:30

Merci pour cette explication on ne peut plus claire.

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..

Laisser un commentaire


Votre email ne sera pas publié