Abstracte klassen en methoden
Definieer gedeeltelijk geïmplementeerde basisklassen met het sleutelwoord abstract.
Abstracte klassen en methoden is een gratis PHP Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject PHP Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus PHP Academy bevat in totaal 4 lessen.
Inleiding: abstracte klassen
Een abstracte klasse kan niet rechtstreeks worden geïnstantieerd — het is een sjabloon. Abstracte methoden leggen een signatuur vast zonder implementatie; subklassen moeten deze implementeren.
Kernbegrippen
Belangrijke begrippen:
- Declareer ze met
abstract class - Abstracte methoden hebben geen body:
abstract public function x(); - Subklassen moeten alle abstracte methoden implementeren
- Ze kunnen zowel abstracte als concrete methoden bevatten
Definitie van een abstracte klasse
Voorbeeld:
<?php
abstract class Animal {
public function __construct(protected string $name) {}
// Must be implemented by each subclass
abstract public function sound(): string;
// Shared concrete method
public function introduce(): string {
return "I am {$this->name} and I say: " . $this->sound();
}
}Abstracte methoden implementeren
Vervolg:
<?php
class Dog extends Animal {
public function sound(): string { return 'Woof'; }
}
class Cat extends Animal {
public function sound(): string { return 'Meow'; }
}
$animals = [new Dog('Rex'), new Cat('Whiskers')];
foreach ($animals as $a) {
echo $a->introduce() . PHP_EOL;
}
// I am Rex and I say: Woof
// I am Whiskers and I say: MeowTemplate Method-patroon
Meer diepgang:
<?php
abstract class DataProcessor {
// Template method: defines the algorithm skeleton
final public function process(array $data): array {
$data = $this->validate($data);
$data = $this->transform($data);
return $this->format($data);
}
abstract protected function validate(array $data): array;
abstract protected function transform(array $data): array;
protected function format(array $data): array { return $data; }
}Abstracte klasse versus interface
Praktisch gebruik:
<?php
// Use abstract class when:
// - Subclasses share implementation code
// - You need constructor logic or state
// Use interface when:
// - Defining a contract (no implementation needed)
// - Multiple inheritance of type is needed
// A class can only extend ONE abstract class
// but can implement MULTIPLE interfacesGedeeltelijke implementatie
Geavanceerd:
<?php
abstract class Repository {
// Concrete method available to all subclasses
protected function findById(int $id, string $table): array {
$stmt = $this->getDb()->prepare("SELECT * FROM $table WHERE id = ?");
$stmt->execute([$id]);
return $stmt->fetch(PDO::FETCH_ASSOC) ?: [];
}
abstract protected function getDb(): PDO;
abstract public function find(int $id): array;
}Patroon
Veelgebruikte patronen voor abstracte klassen worden gebruikt om terugkerende ontwerpproblemen op een overzichtelijke manier op te lossen. Pas ze consequent toe voor leesbare, onderhoudbare code.
Wanneer gebruik je het
Weten wanneer je abstracte klassen moet toepassen is net zo belangrijk als weten hoe. Overmatig gebruik leidt tot complexiteit; te weinig gebruik leidt tot duplicatie.
Praktijkvoorbeeld
In echte toepassingen komen abstracte klassen vaak voor in frameworks, ORM's en servicelagen. Als je dit begrijpt, ben je beter voorbereid om bij te dragen aan professionele PHP-projecten.
Veelvoorkomende valkuilen
Vermijd deze fouten met abstracte klassen:
- Abstracte klassen kunnen niet met new worden geïnstantieerd
- Alle abstracte methoden moeten in concrete subklassen worden geïmplementeerd
- Gebruik het Template Method-patroon om de structuur van algoritmen vast te leggen
- Abstracte klassen kunnen constructors, eigenschappen en concrete methoden bevatten
Snelle controle
Kun je een abstracte klasse rechtstreeks met 'new' instantiëren?
Samenvatting: abstracte klassen
Samenvatting:
- Abstracte klassen kunnen niet met new worden geïnstantieerd
- Alle abstracte methoden moeten in concrete subklassen worden geïmplementeerd
- Gebruik het Template Method-patroon om de structuur van algoritmen vast te leggen
- Abstracte klassen kunnen constructors, eigenschappen en concrete methoden bevatten
Leer PHP met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 49
- Lessen
- 195
Veelgestelde vragen
Is de les “Abstracte klassen en methoden” gratis?
Ja — de volledige tekst van “Abstracte klassen en methoden” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus PHP Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus PHP Academy bevat in totaal 4 lessen.
Wat leer ik in “Abstracte klassen en methoden”?
Definieer gedeeltelijk geïmplementeerde basisklassen met het sleutelwoord abstract. Je oefent met PHP Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met PHP Academy te beginnen?
Ervaring vooraf is niet nodig. PHP Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.
Hoe lang duurt de les “Abstracte klassen en methoden”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over PHP Academy?
Ja. Elke les over PHP Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Klassen uitbreiden met overerving
- Abstracte klassen en methoden
- Interfaces implementeren
- Traits voor codehergebruik