Object georiënteerd programmeren

In de voorgaande hoofdstukken heb je alles kunnen lezen over de denkwijze die schuil gaat achter OOP. Nu is het tijd om die denkwijze uitdrukking te geven in PHP code. Voordat we daadwerkelijk beginnen, wil ik nog even je geheugen opfrissen met drie eerder genoemde conventies van OOP:

- Objecten definieer je in een class
- Eigenschappen definieer je als variabelen (properties) bovenaan je class
- Gedrag/veranderingen/manipulatie van eigenschappen definieer je als functies (methods) in je class

Aan de slag
Laten we snel bekijken hoe dat eruit ziet als we deze regels stap voor stap implementeren. In dit voorbeeld zullen we de basis van een eenvoudige User class opzetten.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
class User {

}

?>

De volgende stap is het definiëren van de properties van de User class. Een eigenschap die iedere User heeft, is een gebruikersnaam.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
class User {
  public $username;

}

?>

Het enige dat nu nog ontbreekt is een method om de gebruikersnaam te wijzigen en een method om die gebruikersnaam op te vragen.

In onderstaand voorbeeld maak ik gebruik van een set-method, iets dat ik later in deze handleiding weer naar de prullenbak zal verwijzen omdat er een veel mooiere manier voor is. Echter gebruik ik hem in dit voorbeeld toch om e.e.a. duidelijk te maken.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
class User {
  public $username;

  public function setUsername($name) {
    $this->username = $name;
  }


  public function getUsername() {
    return $this->username;
  }
}

?>

We zien twee nieuwe methods in de class en aan de namen valt direct af te leiden wat ze precies doen. Met deze laatste toevoeging is onze eerste class al bruikbaar!

$this
In het laatste voorbeeld komen we twee keer de variabele $this tegen. Dit is een speciale variabele die altijd verwijst naar het huidige object of in andere woorden, $this is een speciale 'self-referencing' variabele. We kunnen $this gebruiken om properties en methods van de huidige klasse te benaderen.

De setUsername() method kent de waarde van $name toe aan de property $username. En in de method getUsername() wordt de waarde van property $username teruggegeven.

In het begin kan de werking van $this soms verwarrend zijn, beschouw het in dat geval maar als een speicale OO PHP variabele waarmee PHP weet wat er moet gebeuren. In de loop van deze handleiding raak je vanzelf vertrouwd met de werking en weet ook jij precies wat er gebeurt.

Een bruikbare class, en nu?
Ik vertelde al dat we nu een bruikbare User class hebben. Het volgende voorbeeld laat zien hoe je van deze User class een User object maakt en hoe je vervolgens met het User object kunt werken.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
/* De User class */
class User {
  public $username;

  public function setUsername($name) {
    $this->username = $name;
  }


  public function getUsername() {
    return $this->username;
  }
}


/* Reguliere procedurele code */
$user = new User();
$user->setUsername('jan');

echo $user->getUsername();
?>

De output van dit scriptje ziet er als volgt uit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
jan

Het eerste deel van dit scriptje komt bekend voor, dat is de User class die we eerder gemaakt hebben. Over de procedurele code daaronder, moet nog het een en ander gezegd worden.

Op de eerste regel wordt het User object aangemaakt. Beter gezegd: er wordt een instantie van de User class aangemaakt of de User class wordt geïnstantieerd. Die instantie is vervolgens het User object waar je verder mee werkt. Het User object is toegekend aan de variabele $user, hetgeen betekent dat we vanaf nu met $user deze instantie van de User class kunnen benaderen.

Op de regels daarna wordt achtereenvolgens de gebruikersnaam 'jan' aan het User object toegekend en de gebruikersnaam opgevraagd en geëchoed.

Meerdere instanties van een class
Zoals je wellicht al vermoedde is het mogelijk om meerdere instanties van een bepaalde class aan te maken. Sterker nog, het is zelfs vrij normaal dat dit gebeurt. Denk bijvoorbeeld aan een gastenboek waarin allemaal berichten staan. Elk bericht is dan een instantie van de Message class.

In het geval van onze User class werkt het precies hetzelfde. Er zijn genoeg situaties waarbij je twee of meer User objecten nodig hebt binnen een script. Dat ziet er als volgt uit.

Merk op dat ik hier de code van de User class zelf weggelaten heb, dit is enkel de procedurele code. Uiteraard heb je de code van de User class wel nodig voor een werkend script.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$jan
= new User();
$jan->setUsername('jan');

$inge = new User();
$inge->setUsername('inge');

echo 'Dit script kent twee gebruikers: '.$jan->getUsername().' en '.$inge->getUsername().'.';
?>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Dit script kent twee gebruikers: jan en inge.

We zien nu twee verschillende variabelen ($jan en $inge) die verwijzen naar twee verschillende User objecten. Ook zien we dat aan verschillende objecten verschillende waarden toegekend kunnen worden, terwijl deze verschillende objecten gebasseerd zijn op dezelfde class.

Tot zover dit eerste hoofdstuk over het echte programmeer werk. Tot nu toe hebben we het volgende gedaan:

- Een User class ontworpen
- Verschillende objecten gebasseerd op die class aangemaakt
- Waarden toegekend op opgevraagd van die objecten
- Meerdere objecten binnen een script gebruikt

Voor een eerste hoofdstuk is dit voldoende stof. In de volgende hoofdstukken zal ik verder ingaan op de opbouw van je PHP classes en de mogelijkheden die je hebt.

« Lees de omschrijving en reacties

Inhoudsopgave

  1. Inleiding
  2. Object geörienteerd denken
  3. Foute denkwijze
  4. Object georiënteerd programmeren
  5. Visibility
  6. Naamgeving
  7. Constructor __construct()
  8. Voorbeeld: HTML tabel
  9. Inheritance
  10. Static methods en properties
  11. Abstract classes en Interfaces
  12. Slotwoord en referenties

PHP tutorial opties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.