PHP - Abstrakte Klassen

Willkommen auf unserer Reise in die Welt der PHP-Programmierung! Heute tauchen wir tief ein in eine der mächtigsten Funktionen von PHP: abstrakte Klassen. Bevor wir jedoch loslegen, lassen Sie mich Ihnen eine kleine Geschichte erzählen, wie ich 처음 von abstrakten Klassen erfahren habe.

PHP - Abstract Classes

Es war einmal in einer kleinen Stadt namens "Codeville", eine junge Programmiererin namens Alice, die ein Spiel erstellen wollte. Sie hatte eine großartige Idee für ein textbasiertes Abenteuerspiel, aber sie musste zuerst einige grundlegende Strukturen aufbauen. Das war, als sie abstrakte Klassen entdeckte.

Alice war begeistert, weil abstrakte Klassen es ihr ermöglichten, gemeinsame Verhaltensweisen und Eigenschaften zu definieren, die alle Charaktere in ihrem Spiel teilen würden. Sie konnte dann spezifische Charakterklassen erstellen, die von diesen abstrakten Klassen ableiten, thereby sicherstellend, dass jeder Charakter die notwendigen Attribute und Methoden hat, ohne sie alle von Grund auf neu zu schreiben.

Nun, lassen Sie uns zurück zu unserem Tutorial gehen. In PHP ist eine abstrakte Klasse eine Klasse, die nicht instanziert werden kann und dazu gedacht ist, von anderen Klassen erweitert zu werden. Sie kann sowohl abstrakte Methoden (Methoden, die ohne Implementierung deklariert werden) als auch konkrete Methoden (Methoden mit Implementierung) enthalten.

Beispiel

Lassen Sie uns mit einem einfachen Beispiel beginnen, um das Konzept der abstrakten Klassen zu verstehen. Wir erstellen eine abstrakte Klasse namens Animal und erweitern sie, um zwei spezifische Tierklassen zu erstellen: Dog und Cat.

abstract class Animal {
protected $name;

public function __construct($name) {
$this->name = $name;
}

abstract public function makeSound();

public function getName() {
return $this->name;
}
}

class Dog extends Animal {
public function makeSound() {
return "Woof!";
}
}

class Cat extends Animal {
public function makeSound() {
return "Meow!";
}
}

$dog = new Dog("Buddy");
echo $dog->getName() . " sagt: " . $dog->makeSound() . "\n"; // Ausgabe: Buddy sagt: Woof!

$cat = new Cat("Whiskers");
echo $cat->getName() . " sagt: " . $cat->makeSound() . "\n"; // Ausgabe: Whiskers sagt: Meow!

In diesem Beispiel haben wir eine abstrakte Klasse Animal mit einem Konstruktor und einer Methode makeSound(), die von jeder Klasse, die Animal erweitert, implementiert werden muss. Die Methode getName() ist eine konkrete Methode, meaning sie hat eine Implementierung und kann direkt von Instanzen der Klasse verwendet werden.

Die Klassen Dog und Cat erweitern die Klasse Animal und liefern ihre eigene Implementierung der Methode makeSound(). Wenn wir Instanzen von Dog und Cat erstellen, können wir die Methode makeSound() aufrufen, die die entsprechenden Geräusche für jedes Tier ausgibt.

Unterschied zwischen Schnittstelle und Abstrakter Klasse in PHP

Nun, da Sie gesehen haben, wie abstrakte Klassen funktionieren, lassen Sie uns kurz comparing sie mit Schnittstellen. Sowohl Schnittstellen als auch abstrakte Klassen werden verwendet, um Verträge für Klassen zu definieren, aber sie haben einige wesentliche Unterschiede:

  1. Implementierung: Eine Schnittstelle kann nur abstrakte Methoden (Methoden ohne Implementierung) enthalten, während eine abstrakte Klasse sowohl abstrakte als auch konkrete Methoden enthalten kann. Das bedeutet, wenn Sie Default-Verhalten in Ihrer Klassenhierarchie bereitstellen müssen, sollten Sie eine abstrakte Klasse verwenden. Wenn Sie nur einen Vertrag ohne Default-Verhalten definieren möchten, verwenden Sie eine Schnittstelle.

  2. Mehrfachvererbung: Eine Klasse kann mehrere Schnittstellen implementieren, aber sie kann nur eine abstrakte Klasse erweitern. Dies liegt daran, dass PHP keine Mehrfachvererbung für Klassen unterstützt, was zu Komplikationen bei der Verwaltung von gemeinsamem Zustand und Methodenauflösung führen kann.

  3. Eigenschaften: Schnittstellen können keine Eigenschaften enthalten, während abstrakte Klassen dies können. Das bedeutet, wenn Sie gemeinsame Eigenschaften über mehrere Klassen definieren müssen, sollten Sie eine abstrakte Klasse verwenden.

  4. Methoden Sichtbarkeit: In einer Schnittstelle sind alle Methoden implizit öffentlich. In einer abstrakten Klasse können Sie Methoden mit verschiedenen Sichtbarkeitsstufen (öffentlich, geschützt oder privat) definieren.

  5. Konstruktor: Schnittstellen können keine Konstruktoren enthalten, da sie Verhalten而不是Objekte instanziieren sollen. Abstrakte Klassen können Konstruktoren haben, allowing Sie, gemeinsame Eigenschaften zu initialisieren oder Setup-Aufgaben durchzuführen, wenn eine Instanz einer Unterklasse erstellt wird.

Denken Sie daran, die Wahl zwischen der Verwendung einer Schnittstelle oder einer abstrakten Klasse hängt von Ihren spezifischen Anforderungen und Designzielen ab. Wenn Sie einen strengen Vertrag durchsetzen und sicherstellen müssen, dass alle implementierenden Klassen eine bestimmte Satz von Methoden einhalten, verwenden Sie eine Schnittstelle. Wenn Sie Default-Verhalten oder gemeinsame Eigenschaften über mehrere Klassen bereitstellen müssen, verwenden Sie eine abstrakte Klasse.

Das war's für unsere Einführung in abstrakte Klassen in PHP! Ich hoffe, dieses Tutorial hat Ihnen eine gute Vorstellung davon gegeben, wie sie funktionieren und wie man sie in Ihrem eigenen Code verwendet. Denken Sie daran, Übung macht den Meister, also weiter codieren und experimentieren mit abstrakten Klassen, um sich daran zu gewöhnen. Viel Spaß beim Coden!

Credits: Image by storyset