Informatique


Les assesseurs et les mutateurs

Principe

Le principe d'encapsulation nous empêche d'accéder directement aux propriétés d'objet car elles sont privées, seules des méthodes de la classe peuvent y accéder en lecture et écriture.


Les assesseurs (getters)

Les assesseurs permettront de récupérer les contenus des variables.

Par convention ces méthodes portent le même nom précédé de get et sans l'underscore que les propriétés dont elles renvoient les valeurs.

  • on crée une méthode getters permettant de récupérer le contenu de la propriété $_nom de l'objet elev1
  • par convention elle porte le même nom que la propriété à renvoyer précédé de get: getNom()
  • la méthode est public afin d'être accessible à partir de n'importe quel point du programme

Démo
<?php
class eleve    {
//propriétés initialisées
    private $_nom="inconnu";
    private $_preno="inconnu";
//getters permettant de renvoyer la propriété $_nom
	public function getNom()	{
		return $this->_nom;
	}
}
//On crée une instance de la classe eleve
$elev1=new eleve();
//On renvoie la valeur de la propriété $_nom
$valeur_nom=$elev1->getNom();
var_dump($valeur_nom);
?>

Les mutateurs (setters)

Les mutateurs permettront la mise à jour des contenus des variables.

Par convention ces méthodes portent le même nom précédé de set et sans l'underscore que les propriétés dont elles modifient les valeurs.

Il est impératif que la classe soit protégée des affectations fantaisistes, il y a donc lieu de tester les valeurs avant affectation afin que le principe d'encapsulation soit respecté.

  • on crée une méthode setters permettant de modifier la propriété $_nom de l'objet elev1, on teste le paramètre pour bloquer toutes entrées non autorisées.
  • par convention elle porte le même nom que la propriété à renvoyer précédé de set: setNom()
  • on crée une méthode getters permettant de renvoyer le contenu de la propriété $_nom de l'objet elev1
  • ces méthodes sont public afin d'être accessible à partir de n'importe quel point du programme

Démo
<?php
class eleve    {
//propriétés initialisées
    private $_nom="inconnu";
    private $_preno="inconnu";

	public function setNom($nom)	{
		if (!empty($nom) AND is_string($nom))	{
		$this->_nom=$nom;
		}
	}
	public function getNom()	{
		return $this->_nom;	
		}
}
//On crée une instance de la classe eleve
$elev1=new eleve();
//On affecte une valeur à la propriété $_nom
$elev1->setNom("Doofenshmirtz");
$valeur_nom=$elev1->getNom();
var_dump($valeur_nom);
?>