Polymorfisme stelt code in staat om met objecten te werken op een abstract niveau, waarbij dezelfde methode op verschillende manieren kan worden geïmplementeerd door verschillende klassen.
Dit maakt het mogelijk om nieuwe klassen toe te voegen aan het systeem zonder de bestaande code te wijzigen.
Aspecten:
<?php
// Basisklasse
class SimpleClass {
// Gegevens
protected $attribuut = "Tekst waarde";
// Gedrag
public function attribuutWeergeven() {
return $this->attribuut . "\n";
}
}
// SubClass die van SimpleClass erft
class SubClass extends SimpleClass {
// Extra gedrag of aanpassingen kunnen hier worden toegevoegd
public function extraGedrag() {
return "Extra gedrag van de subklasse.\n";
}
// Overschrijf de methode uit de basisklasse om polymorfisme te demonstreren
public function attribuutWeergeven() {
return "Aangepast attribuutweergave van de SubClass: " . $this->attribuut . "\n";
}
}
// Maak een exemplaar aan van SubClass (instance)
$subObject = new SubClass();
// Gebruik de overschreven methode van de subklasse
echo $subObject->attribuutWeergeven();
?>
De interface zorgt ervoor dat klassen die Actie implementeren, een overeenkomst naleven om bepaalde methode te implementeren. Dit zorgt voor een gestandaardiseerde manier om gedrag te garanderen en vergroot de flexibiliteit door klassen te dwingen om bepaalde acties uit te voeren, zonder de noodzaak van strikte hiërarchieën van overerving.
<?php
// Definieer een interface genaamd "Actie"
interface Actie {
public function aanvallen();
public function verdedigen();
}
// Klasse die de interface implementeert
class Speler implements Actie {
public function aanvallen() {
echo "De speler valt aan.\n";
}
public function verdedigen() {
echo "De speler verdedigt zich.\n";
}
}
// Klasse die de interface implementeert
class Monster implements Actie {
public function aanvallen() {
echo "Het monster valt aan.\n";
}
public function verdedigen() {
echo "Het monster verdedigt zich.\n";
}
}
// Maak een instantie van de Monster-klasse en roep de methoden aan
$monster = new Monster();
$monster->aanvallen();
$monster->verdedigen();
// Maak een instantie van de Speler-klasse en roep de methoden aan
$speler = new Speler();
$speler->aanvallen();
$speler->verdedigen();
?>
Method overloading (PHP):
Naast het overschrijven van methoden (Method overwriting), bestaat ook het idee overloaden, waar we meerdere parameters kunnen meegeven aan 'dezelfde' methode, maar dat deze afhankelijk van onze parameters anders gebruikt wordt.
Hoewel method overloading ook een aspect is van polymofisme, is dit echter iets wat 'van nature' niet direct kan in PHP.
Class
Object {
attribuut : waarde
constructor(waarde) { waarde } methode()
}
...
verschillende implementaties van methode()
Object
overloadVoorbeeld = Object(1)
overloadVoorbeeld = Object(1,2)
overloadVoorbeeld = Object(1,2,3)