Bij encapsulatie gaat het om het verpakken van de gegevens en methoden die op die gegevens werken binnen één enkele entiteit (object).
Hierbij worden de interne details afgeschermd van de externe wereld. Dit concept verbetert de code-organisatie, verbetert de beveiliging en draagt bij aan de ontwikkeling van modulaire en onderhoudbare softwaresystemen.
Aspecten:
Gebruik van zogenaamde getters en setters om gegevens op te halen of te manipuleren.
<?php
class SimpleClass {
// Gegevens
private $attribuut;
// Constructor
public function __construct($waarde) {
$this->attribuut = $waarde;
}
// Getter methode voor het attribuut
public function getAttribuut() {
return $this->attribuutWeergeven();
}
// Setter methode voor het attribuut
public function setAttribuut($newValue) {
$this->attribuut = $newValue;
}
// Gedrag
private function attribuutWeergeven() {
return $this->attribuut . "\n";
}
}
// Maak een exemplaar aan van SimpleClass (instance)
// Geeft waarde voor het attribuut mee bij het aanmaken (__constructor)
$myObject = new SimpleClass("Tekst waarde");
// Benader het attribuut van het exemplaar via getter
echo $myObject->getAttribuut();
// Verander de waarde van het attribuut met de setter methode
$myObject->setAttribuut("Nieuwe waarde");
// Benader het attribuut van het exemplaar opnieuw via getter
echo $myObject->getAttribuut();
?>
Het eerste wat opvalt is dat we nu een constructor gebruiken. Dit geeft initiele waarden mee aan het object.
Verder is $attribuut en attribuutWeergeven() private gemaakt, wat betekent dat het nu alleen binnen de klasse zelf kan worden benaderd.
getAttribuut() en setAttribuut() zijn toegevoegd om externe toegang tot dit attribuut te bieden. De interne staat van het object wordt beheerd door de klasse zelf.
Op deze manier kunnen we objecten afbakenen en houden we een goede controle op wat toegankelijk gemaakt is.
Als het attribuut op protected staat in plaats van private, betekent dit dat het attribuut alleen toegankelijk is binnen de klasse zelf en binnen afgeleide klassen (subklassen), maar niet buiten de klasse of de subklassen. Dit betekent dat de getAttribuut() en setAttribuut() methoden nog steeds rechtstreeks toegang hebben tot het attribuut binnen de klasse SimpleClass, maar dat externe code, zoals code buiten de klasse, geen directe toegang heeft tot het attribuut.