Informatique


Accessibilité aux propriétés et aux méthodes de l'objet

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