Polymorfisme in PHP is een concept uit de objectgeoriënteerde programmeertaal dat verwijst naar het vermogen van verschillende objecten om dezelfde methode op verschillende manieren te implementeren. Dit wordt vaak bereikt via abstracte klassen en interfaces. Polymorfisme maakt het mogelijk om een enkele interface te gebruiken voor een algemene klasse van acties, waardoor code flexibiliteit en herbruikbaarheid krijgt.
Voorbeeld:
```
abstract class Vorm {
abstract public function oppervlakte();
}
class Cirkel extends Vorm { private $radius;
public function __construct($radius) { $this->radius = $radius; } public function oppervlakte() { return pi() * pow($this->radius, 2); } }class Vierkant extends Vorm { private $zijde;
public function __construct($zijde) { $this->zijde = $zijde; } public function oppervlakte() { return pow($this->zijde, 2); } }$vormen = [
new Cirkel(5),
new Vierkant(4)
];
foreach ($vormen as $vorm) {
echo $vorm->oppervlakte() . “\n”;
}
```
In dit voorbeeld zien we polymorfisme in actie. Zowel de klasse `Cirkel` als `Vierkant` implementeren de abstracte methode `oppervlakte` op hun eigen manier. De array `$vormen` bevat objecten van beide klassen, en we kunnen de `oppervlakte`-methode aanroepen zonder te weten welk type object in de array zit. Dit is de kracht van polymorfisme: de mogelijkheid om dezelfde interface op verschillende manieren te implementeren.
Voorbeeld:
```
interface Betaling {
public function betalen($bedrag);
}
class CreditCardBetaling implements Betaling {
public function betalen($bedrag) {
// CreditCard betaling logica
echo “Betaald $bedrag met CreditCard\n”;
}
}
class PayPalBetaling implements Betaling {
public function betalen($bedrag) {
// PayPal betaling logica
echo “Betaald $bedrag met PayPal\n”;
}
}
function verwerkBetaling(Betaling $betaling, $bedrag) {
$betaling->betalen($bedrag);
}
$ccBetaling = new CreditCardBetaling();
$paypalBetaling = new PayPalBetaling();
verwerkBetaling($ccBetaling, 100);
verwerkBetaling($paypalBetaling, 200);
```
In dit voorbeeld worden de methoden die in de interface `Betaling` gedefinieerd zijn, geïmplementeerd door de klassen `CreditCardBetaling` en `PayPalBetaling`. De functie `verwerkBetaling` accepteert elke object dat de `Betaling` interface implementeert, ongeacht de specifieke implementatiedetails.
1. Official PHP Documentation:
- Abstract Classes: https://www.php.net/manual/en/language.oop5.abstract.php
- Interfaces: https://www.php.net/manual/en/language.oop5.interfaces.php
1. Programming PHP by Kevin Tatroe and Peter MacIntyre:
- This book provides in-depth examples and explanations of object-oriented concepts in PHP, including polymorfisme.
1. PHP: The Right Way:
- A community-driven PHP resource that provides clear and comprehensive guidance on best practices, including OOP concepts. Website: https://phptherightway.com/
Polymorfisme zorgt ervoor dat de complexiteit van de code wordt verminderd en maakt de code makkelijker te onderhouden en uit te breiden. Door polymorfisme toe te passen, kunnen ontwikkelaars flexibele en herbruikbare code schrijven die kan worden aangepast aan veranderende eisen zonder de bestaande code te breken.