Wat is polymorfisme en hoe wordt het gebruikt in PHP-programmering?
sobes.tech AI
Antwoord van AI
Polymorfisme is de mogelijkheid om één en dezelfde interface te gebruiken voor verschillende datatypes. In PHP komt dit in verschillende vormen tot uiting:
-
Overerving (Subtype Polymorfisme): Afgeleide klassen kunnen de methoden van de basisklasse overschrijven en hun eigen implementatie bieden. Wanneer een methode wordt aangeroepen op een object van het basistype, wordt in werkelijkheid de methode van de specifieke afgeleide klasse uitgevoerd, afhankelijk van het type object.
<?php class Animal { public function makeSound() { echo "Algemeen dierengeluid\n"; } } class Dog extends Animal { public function makeSound() { echo "Woef!\n"; } } class Cat extends Animal { public function makeSound() { echo "Miauw!\n"; } } function makeAnimalSound(Animal $animal) { $animal->makeSound(); // Roept de methode van het juiste subtype aan } $dog = new Dog(); $cat = new Cat(); makeAnimalSound($dog); // Uitvoer: Woef! makeAnimalSound($cat); // Uitvoer: Miauw! -
Interfaces (Interface Polymorfisme): Verschillende klassen kunnen hetzelfde interface implementeren, waarbij ze beloven een bepaalde set methoden met dezelfde handtekening te bieden. Dit maakt het mogelijk om met objecten van verschillende klassen te werken via een gemeenschappelijke interface.
<?php interface Shape { public function getArea(); } class Circle implements Shape { private $radius; public function __construct($radius) { $this->radius = $radius; } public function getArea() { return pi() * $this->radius * $this->radius; } } class Square implements Shape { private $side; public function __construct($side) { $this->side = $side; } public function getArea() { return $this->side * $this->side; } } function calculateTotalArea(array $shapes) { $totalArea = 0; foreach ($shapes as $shape) { if ($shape instanceof Shape) { // Controle op interface $totalArea += $shape->getArea(); } } return $totalArea; } $shapes = [new Circle(5), new Square(4)]; echo calculateTotalArea($shapes); // Toont de som van de oppervlakten van cirkel en vierkant -
Abstracte klassen (Abstracte klasse Polymorfisme): Vergelijkbaar met polymorfisme op basis van interfaces, maar stelt je in staat om een basisimplementatie voor sommige methoden te definiëren.
Polymorfisme verhoogt de flexibiliteit, uitbreidbaarheid en onderhoudbaarheid van de code, waardoor je algemene algoritmen kunt schrijven die werken met collecties van objecten van verschillende types via een gemeenschappelijke interface.