Visibility
Visibility is de toegang die de buitenwereld (lees: andere objecten, globale functies of procedurele code) heeft tot properties en methods binnen je class. Tot nu toe zijn we een aantal keer het keyword 'public' tegengekomen en ik ben daar - expres - nog niet verder op ingegaan. Maar nu is dan het moment om uit te leggen waar dit precies om gaat.
Binnen OOP kennen we drie keywords die te maken hebben met visibility: public, protected en private. Deze keywords vervullen een cruciale rol binnen het principe van Encapsulation en Data Hiding (denk nog even terug aan de definitie van OOP). Met behulp van deze keywords bepaal je welke onderdelen van je class wel of niet voor de buitenwereld toegankelijk moeten zijn.
Public
Het public keyword biedt de minste bescherming voor de properties en methods binnen je class. De buitenwereld heeft de mogelijkheid om inhoud van properties te wijzigen of methods uit te voeren.
Aangezien de property $username public gedeclareerd is, zullen de laatste twee regels geen foutmeldingen opleveren. Het is in dit geval mogelijk om op die manier de property te echoën en aan te passen.
Private
Met het private keyword scherm je properties en methods af van de buitenwereld. Dit betekent dat je alleen vanuit de klasse zelf de properties kunt wijzigen of methods kunt aanroepen.
Aangezien de property nu private gedeclareerd is, levert de op een na laatste regel een foutmelding op. Het is niet mogelijk om de property direct te benaderen. De laatste regel is nu nog de enige manier om de username weer te geven.
Protected
Het protected keyword speelt een belangrijke rol bij het onderwerp Inheritance (overerving) waar ik later in deze handleiding op terug kom. Properties en methods die als protected gedeclareerd zijn, zijn alleen beschikbaar binnen de huidige class en alle child classes (classes die een uitbreiding zijn van de huidige class).
In het voorbeeld hieronder wordt gebruik gemaakt van inheritance. Dit onderwerp heb ik nog niet behandeld en het kan ook geen kwaad om dit voor nu over te slaan. Ik denk echter dat het redelijk voor zich spreekt, vandaar dat het voorbeeld hier wel opgenomen is.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class User {
protected $username;
public function setUsername($name) {
$this->username = $name;
}
public function getUsername() {
return $this->username;
}
}
class Premium_User extends User {
private $premiumId;
public function setData($username, $id) {
$this->username = $username;
$this->premiumId = $id;
}
}
$user = new Premium_User();
$user->setData('jan', 100);
echo $user->username;
?>
Omdat de $username property nu protected gedeclareerd is, zal ook hier de laatste regel een foutmelding geven. De property is immers enkel te gebruiken vanuit de User en Premium_User class.
Welke visibility moet ik nu gebruiken?
Ervaring is eigenlijk het enige dat je in staat stelt om op het eerste gezicht te bepalen niveau van visibility goed is voor je properties en methods. In het begin raad ik aan om al je properties als private te declareren en al je methods als public. Op deze manier dwing je jezelf om de properties van een class vanuit de class zelf aan te passen, precies waar het bij OOP om draait. Een object kan alleen zijn eigen eigenschapen bepalen en niet die van een ander.
Visibility is een feature die sinds PHP5 beschikbaar is. Oudere versies van PHP kennen de keywords public, protected en private niet en gebruik ervan zal resulteren in een foutmelding.
Inhoudsopgave
- Inleiding
- Object geörienteerd denken
- Foute denkwijze
- Object georiënteerd programmeren
- Visibility
- Naamgeving
- Constructor __construct()
- Voorbeeld: HTML tabel
- Inheritance
- Static methods en properties
- Abstract classes en Interfaces
- Slotwoord en referenties