2010-02-18 9 views

Répondre

8

Ceci est un concept de dissimulation de données (ou d'encapsulation) dans OOP. Par exemple si vous voulez avoir une certaine propriété dans votre classe disons "Montant" et donnons au client de votre classe l'option de changer ou d'extraire sa valeur. Vous devez rendre votre variable "Montant" privée (non visible pour ceux qui utilisent votre class) et générer deux méthodes: un getter et un setter qui manipule votre valeur (qui sont publics).

La raison est de pouvoir valider des données ou de les manipuler avant de définir ou d'obtenir votre valeur. Voici un bref exemple:

class test { 

    private $count; //those who use your class are not able to see this property, only the methods above 

    public function setCount($value)  
    { 
      //make some validation or manipulation on data here, if needed 
     $this->count = $value;  
    } 

    public function getCount()  
    {     
     return $this->count;  
    }  
} 
3

Les attributs des classes peuvent être privés. Cela signifie que seul l'objet peut lire et écrire ses propres attributs privés. Par conséquent, vous avez besoin de méthodes pour le faire. Les méthodes qui lisent et renvoient une valeur d'attribut sont appelées getters et celles qui écrivent des attributs sont appelées setters. Avec ces méthodes, les classes peuvent contrôler ce qui sort et ce qui arrive. Ce concept est appelé encapsulation.

+0

Dans certains cas accesseurs sont à l'opposé de l'encapsulation. Si vous avez un getter ET un setter pour une variable, il y a de fortes chances pour que vous deviez changer de design, parce que vous êtes en train d'exposer ce membre interne. Pourquoi setX, getX, setY, getY quand vous pouvez utiliser une méthode 'moveTo' ou 'moveBy' plus encapsulante? –

2

accesseurs et de mutateurs sont tout à fait nouveau concept en PHP 5 sous la forme de deux fonctions magiques __get() et set(). Ces deux fonctions définissent ou obtiennent une valeur de propriété d'un objet de façon spectaculaire, comme expliqué dans l'exemple suivant.

class Datatype{ 
private $thing; 
public function _set($k,$v){ 
$this->$k = $v; 
} 
public function __get($k){ 
return $this->$k; 
} 
}