Avec des propriétés "public"
Les propriétés public d'une classe indique que ces propriétés sont accessible à l'intérieur et à l'extérieur de la classe.
L'option public est forcément peu utilisé car les propriétés ne sont pas protégées!
Nous allons affecter et afficher les propriétés $nom et $preno de l'objet $elev1 à partir de l'extérieur de la classe.
Démo
<?php
class eleve {
//déclaration des propriétés
public $nom;
public $preno;
}
//On crée une instance de la classe eleve
$elev1=new eleve();
//On affecte une valeur à la propriété $nom
$elev1->nom='Doofenshmirtz';
$elev1->preno='Heinz';
//On affiche les propriétés $nom et $preno de laninstance $elev1
echo("Nom de notre élève préféré: $elev1->nom<br>");
echo("Prénom de notre élève préféré: $elev1->preno");
?>
Avec des propriétés "private"
Il s'agit de l'option la plus stricte, les propriétés ne sont accessible qu'à partir de la classe.
Il s'agit de l'option la plus fréquente car elle permet de protéger les propriétés de l'objet.
Avec des propriétés "private", le cas "fatal error"
Dans cette solution on constate qu'il n'est pas possible d'accéder aux propriétés en dehors de la classe.
Le code suivant renvoie une fatal error, les propriétés étant private l'interpréteur renvoie une erreur.
Démo
<?php
class eleve {
//propriétés initialisées
private $_nom="inconnu";
private $_preno="inconnu";
private $_adres="sans domicile";
private $_codep="000";
private $_telpa="+000.000.000";
private $_telel="+000.000.000";
}
//On crée une instance de la classe eleve
$elev1=new eleve();
//On affecte une valeur à la propriété $_nom
$elev1->_nom="Doofenshmirtz";
?>
La solution réside dans des méthodes permettant l'accès aux variables de la classe.
Méthode permettant d'accéder aux propriétés "private"
On va définir une méthode nous permettant de modifier les propriétés private.
- on appelle la méthode modifproprietes() afin de pouvoir accéder aux propriétés à partir de l'intérieur de la classe
- $this représente l'objet sur lequel on travaille.
- les variables déclarées dans les parenthèses de la fonction sont locales
- l'affectation des variables de la fonction se fait dans l'ordre de l'appel
Lorsqu'un objet appelle une méthode, il transfère à la méthode un identificateur qui le représente.
La variable $this est affectée avec cet identificateur et représente donc l'objet sur lequel on travaille.
Démo
<?php
class eleve {
//propriétés initialisées
private $_nom="inconnu";
private $_preno="inconnu";
private $_adres="sans domicile";
private $_codep="000";
private $_telpa="+000.000.000";
private $_telel="+000.000.000";
//méthode permettant un accès aux prpriétés
public function modifproprietes($nom,$preno,$adres,$codep,$telpa,$telel){
$this->_nom=$nom;
$this->_preno=$preno;
$this->_adres=$adres;
$this->_codep=$codep;
$this->_telpa=$telpa;
$this->_telel=$telel;
}
}
//On crée une instance de la classe eleve
$elev1=new eleve();
var_dump($elev1);
echo "<br>";
//On affecte de nouvelles valeurs
$elev1->modifproprietes("vdv","louis","rue brol","1140","+32","+33");
var_dump($elev1);
?>
la méthode modifproprietes() est public et est donc accessible à partir en dehors de la class, elle est visible partout dans le programme.
On peut bien sûr créer des propriétés private, accessibles uniquement à l'intérieur de la class, et protected, accessibles uniquement à l'intérieur de la class et des class filles.
Avec des propriétés "protected"
Les propriétés protected sont accessibles à partir de la classe et des classes dérivées (voir héritage).
L'encapsulation
Si nous utilisons l'option public pour les propriétés celles-ci sont accessibles partout dans le programme, sans le moindre contrôle concernant
le type d'information et le contenu d'information qui seront affectés aux propriétés.
Encapsuler les propriétés, c'est les protéger, elles ne seront accessibles qu'au travers des méthodes de la classe qui les héberge.
En résumé:
- public: visible et accessible partout dans le pgm.
- private: visible et accessible uniquement au sein de la classe où la propriétés est définie.
- protected: visible et accessible uniquement au sein de la classe où la propriétés est définie et dans les classes dérivées (voir héritage).