Sobes.tech
Middle
284

Was ist Polymorphismus und wie wird er in der PHP-Programmierung verwendet?

Antwort von AI

sobes.tech KI

Polymorphismus ist die Fähigkeit, eine einheitliche Schnittstelle für verschiedene Datentypen zu verwenden. In PHP zeigt sich dies in mehreren Formen:

  1. Vererbung (Subtyp-Polymorphismus): Unterklassen können Methoden der Basisklasse überschreiben und ihre eigene Implementierung bereitstellen. Wenn eine Methode an einem Objekt des Basistyps aufgerufen wird, wird tatsächlich die Methode der konkreten Unterklasse ausgeführt, abhängig vom Objekttyp.

    <?php
    
    class Animal {
        public function makeSound() {
            echo "Allgemeines Tiergeräusch\n";
        }
    }
    
    class Dog extends Animal {
        public function makeSound() {
            echo "Wuff!\n";
        }
    }
    
    class Cat extends Animal {
        public function makeSound() {
            echo "Miau!\n";
        }
    }
    
    function makeAnimalSound(Animal $animal) {
        $animal->makeSound(); // Ruft die Methode des entsprechenden Subtyps auf
    }
    
    $dog = new Dog();
    $cat = new Cat();
    
    makeAnimalSound($dog); // Ausgabe: Wuff!
    makeAnimalSound($cat); // Ausgabe: Miau!
    
  2. Schnittstellen (Interface-Polymorphismus): Verschiedene Klassen können eine gleiche Schnittstelle implementieren, die verspricht, eine bestimmte Menge von Methoden mit gleicher Signatur bereitzustellen. Dies ermöglicht die Arbeit mit Objekten verschiedener Klassen über eine gemeinsame Schnittstelle.

    <?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) { // Überprüfung auf Schnittstelle
                $totalArea += $shape->getArea();
            }
        }
        return $totalArea;
    }
    
    $shapes = [new Circle(5), new Square(4)];
    echo calculateTotalArea($shapes); // Gibt die Summe der Flächen des Kreises und des Quadrats aus
    
  3. Abstrakte Klassen (Abstrakter Klassen-Polymorphismus): Ähnlich wie der Polymorphismus auf Schnittstellenbasis, aber erlaubt es, eine Grundimplementierung für einige Methoden zu definieren.

Polymorphismus erhöht die Flexibilität, Erweiterbarkeit und Wartbarkeit des Codes, indem er das Schreiben von generischen Algorithmen ermöglicht, die mit Sammlungen von Objekten verschiedener Typen über eine gemeinsame Schnittstelle arbeiten.