Abstrakte Klassen und Methoden
Definieren Sie teilweise implementierte Basisklassen mit dem Schlüsselwort abstract.
Abstrakte Klassen und Methoden ist eine kostenlose PHP Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des PHP Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der PHP Academy-Kurs umfasst insgesamt 4 Lektionen.
Einführung: Abstrakte Klassen
Eine abstrakte Klasse kann nicht direkt instanziiert werden – sie dient als Vorlage. Abstrakte Methoden deklarieren eine Signatur ohne Implementierung; Unterklassen müssen diese implementieren.
Wichtige Konzepte
Wichtige Konzepte:
- Mit
abstract classdeklarieren - Abstrakte Methoden haben keinen Rumpf:
abstract public function x(); - Unterklassen müssen alle abstrakten Methoden implementieren
- Kann sowohl abstrakte als auch konkrete Methoden enthalten
Definition einer abstrakten Klasse
Beispiel:
<?php
abstract class Animal {
public function __construct(protected string $name) {}
// Must be implemented by each subclass
abstract public function sound(): string;
// Shared concrete method
public function introduce(): string {
return "I am {$this->name} and I say: " . $this->sound();
}
}Implementieren abstrakter Methoden
Fortsetzung:
<?php
class Dog extends Animal {
public function sound(): string { return 'Woof'; }
}
class Cat extends Animal {
public function sound(): string { return 'Meow'; }
}
$animals = [new Dog('Rex'), new Cat('Whiskers')];
foreach ($animals as $a) {
echo $a->introduce() . PHP_EOL;
}
// I am Rex and I say: Woof
// I am Whiskers and I say: MeowTemplate-Method-Muster
Weitere Vertiefung:
<?php
abstract class DataProcessor {
// Template method: defines the algorithm skeleton
final public function process(array $data): array {
$data = $this->validate($data);
$data = $this->transform($data);
return $this->format($data);
}
abstract protected function validate(array $data): array;
abstract protected function transform(array $data): array;
protected function format(array $data): array { return $data; }
}Abstrakte Klasse oder Interface
Praktische Anwendung:
<?php
// Use abstract class when:
// - Subclasses share implementation code
// - You need constructor logic or state
// Use interface when:
// - Defining a contract (no implementation needed)
// - Multiple inheritance of type is needed
// A class can only extend ONE abstract class
// but can implement MULTIPLE interfacesTeilimplementierung
Fortgeschrittenes Thema:
<?php
abstract class Repository {
// Concrete method available to all subclasses
protected function findById(int $id, string $table): array {
$stmt = $this->getDb()->prepare("SELECT * FROM $table WHERE id = ?");
$stmt->execute([$id]);
return $stmt->fetch(PDO::FETCH_ASSOC) ?: [];
}
abstract protected function getDb(): PDO;
abstract public function find(int $id): array;
}Muster
Gängige Muster für abstrakte Klassen helfen dabei, wiederkehrende Entwurfsprobleme sauber zu lösen. Wenden Sie sie konsequent an, damit Ihr Code lesbar und wartbar bleibt.
Wann Sie es verwenden sollten
Zu wissen, wann Sie abstrakte Klassen einsetzen sollten, ist ebenso wichtig wie zu wissen, wie sie funktionieren. Übermäßiger Einsatz führt zu Komplexität, zu geringer Einsatz zu Duplikation.
Praxisbeispiel
In realen Anwendungen finden sich abstrakte Klassen häufig in Frameworks, ORMs und Service-Schichten. Wenn Sie sie verstehen, sind Sie gut darauf vorbereitet, an professionellen PHP-Projekten mitzuwirken.
Häufige Fehler
Vermeiden Sie diese Fehler bei abstrakten Klassen:
- Abstrakte Klassen können nicht mit new instanziiert werden
- Alle abstrakten Methoden müssen in konkreten Unterklassen implementiert werden
- Verwenden Sie das Template-Method-Muster, um Grundgerüste für Algorithmen zu definieren
- Abstrakte Klassen können Konstruktoren, Eigenschaften und konkrete Methoden enthalten
Schnelltest
Kann eine abstrakte Klasse direkt mit „new“ instanziiert werden?
Zusammenfassung: Abstrakte Klassen
Zusammenfassung:
- Abstrakte Klassen können nicht mit new instanziiert werden
- Alle abstrakten Methoden müssen in konkreten Unterklassen implementiert werden
- Verwenden Sie das Template-Method-Muster, um Grundgerüste für Algorithmen zu definieren
- Abstrakte Klassen können Konstruktoren, Eigenschaften und konkrete Methoden enthalten
Häufig gestellte Fragen
Ist die Lektion „Abstrakte Klassen und Methoden“ kostenlos?
Ja — der vollständige Text von „Abstrakte Klassen und Methoden“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des PHP Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der PHP Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Abstrakte Klassen und Methoden“?
Definieren Sie teilweise implementierte Basisklassen mit dem Schlüsselwort abstract. Du übst PHP Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um PHP Academy zu starten?
Keine Vorkenntnisse erforderlich. PHP Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Abstrakte Klassen und Methoden“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser PHP Academy-Lektion Code schreiben und ausführen?
Ja. Jede PHP Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Klassen durch Vererbung erweitern
- Abstrakte Klassen und Methoden
- Interfaces implementieren
- Traits zur Wiederverwendung von Code