We hebben dus classes, maar we hebben ook abstracte classes. Hierin staan keiharde implementaties, maar wordt soms ook afgedwongen dat ervende classes bepaalde functionaliteit zelf implementeren.

Een abstracte class kan niet worden geïnstantieerd. Het kan alleen uitgebreid worden. In principe kan een abstracte class worden gezien als een hybride variant van een interface.

Bij een abstracte class is het mogelijk om gedeelde functionaliteit te definiëren. Dit kunnen functies zijn met een complete implementatie. Daarnaast kan een abstracte class ook bepaalde functionaliteit afdwingen.

 

<?php
abstract class Medewerker {

    public $uurloon = 10;
    public $aantal_uren = 40;
   
    public function weekloon() {
       return $this->uurloon * $this->aantal_uren;
    }
    
    abstract public function taken();
}

Om een class abstract te maken gebruiken we het woord abstract.We kunnen deze class niet meer instantiëren. In deze abstracte class dwingen we tevens af dat elke functie die deze class gebruikt (extend) een publieke methode taken moet bevatten.

Abstracte class gebruiken (extenden)

In de uitleg over classes is al kort verteld hoe je een bestaande class kunt uitbreiden. In principe werkt dit hetzelfde voor een abstracte class. 

<?php
class SeniorMedewerker extends Medewerker {

    public function taken() {
        return array(
            'Aanwezig zijn',
            'Leiding geven',
        );
    }
}