In PHP gibt es sowohl abstrakte Klassen als auch Schnittstellen (Interfaces), die beide häufig verwendet werden, um die Struktur des Codes zu definieren und um sicherzustellen, dass bestimmte Methoden in den Klassen implementiert werden, die von ihnen abgeleitet sind. Trotzdem haben sie unterschiedliche Eigenschaften und Einsatzmöglichkeiten.
Beispiele:
```php
abstract class Fahrzeug {
abstract public function starten();
class Auto extends Fahrzeug {
public function starten() {
echo “Das Auto startet.”;
}
}
$auto = new Auto();
$auto->starten(); // Ausgabe: Das Auto startet.
$auto->tanken(); // Ausgabe: Das Fahrzeug wird betankt.
```
In diesem Beispiel ist die Klasse `Fahrzeug` eine abstrakte Klasse mit einer abstrakten Methode `starten` und einer konkreten Methode `tanken`. Die Klasse `Auto` erbt von `Fahrzeug` und implementiert die Methode `starten`.
Beispiele:
```php
interface Flugfähig {
public function fliegen();
}
interface Fahrbar {
public function fahren();
}
class Flugzeug implements Flugfähig {
public function fliegen() {
echo “Das Flugzeug fliegt.”;
}
}
class Auto implements Fahrbar {
public function fahren() {
echo “Das Auto fährt.”;
}
}
class fliegendesAuto implements Flugfähig, Fahrbar { public function fliegen() { echo “Das fliegende Auto fliegt.”; }
public function fahren() { echo “Das fliegende Auto fährt.”; } }$flugzeug = new Flugzeug();
$flugzeug->fliegen(); // Ausgabe: Das Flugzeug fliegt.
$auto = new Auto();
$auto->fahren(); // Ausgabe: Das Auto fährt.
$fliegendesAuto = new fliegendesAuto();
$fliegendesAuto->fliegen(); // Ausgabe: Das fliegende Auto fliegt.
$fliegendesAuto->fahren(); // Ausgabe: Das fliegende Auto fährt.
```
In diesem Beispiel definieren die Schnittstellen `Flugfähig` und `Fahrbar` die Methoden `fliegen` und `fahren`. Die Klasse `Flugzeug` implementiert die Methode `fliegen`, die Klasse `Auto` implementiert die Methode `fahren`, und die Klasse `fliegendesAuto` implementiert beide Methoden.
2. Mehrfachvererbung: Eine Klasse kann nur von einer abstrakten Klasse erben, aber mehrere Schnittstellen implementieren.
3. Methodendefinition: Abstrakte Klassen können konkrete Methoden mit Körper und abstrakte Methoden ohne Körper enthalten. Schnittstellen enthalten nur methodensignaturen (ohne Körper).
4. Felder/Eigenschaften: Abstrakte Klassen können Eigenschaften (Member-Variablen) enthalten, Schnittstellen können keine Eigenschaften enthalten.
Die Wahl zwischen abstrakten Klassen und Schnittstellen hängt oft von der spezifischen Anwendung und vom Design des Codes ab.
Diese offiziellen PHP-Dokumentationsseiten bieten detaillierte Erklärungen und Beispiele, die die hier diskutierten Konzepte und ihre Anwendung weiter veranschaulichen.