Dino Geek, versucht dir zu helfen

Was ist der Unterschied zwischen einer abstrakten Klasse und einer Schnittstelle in PHP?


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.

  1. Abstrakte Klasse
    Eine abstrakte Klasse in PHP ist eine Klasse, die nicht direkt instanziiert werden kann. Sie kann sowohl abstrakte Methoden (die keinen Körper haben) als auch konkrete Methoden (die einen Körper haben) enthalten. Abstrakte Methoden müssen in den Unterklassen implementiert werden, die von der abstrakten Klasse erben. Das ermöglicht es, eine teilweise Implementierung von Funktionen bereitzustellen und die Unterklassen zu zwingen, bestimmte Methoden zu definieren.

Beispiele:
```php
abstract class Fahrzeug { abstract public function starten();

public function tanken() { echo “Das Fahrzeug wird betankt.”; } }

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`.

  1. Schnittstelle
    Eine Schnittstelle in PHP definiert lediglich die Methodensignaturen, ohne deren Implementierung. Alle Methoden in einer Schnittstelle sind per Definition abstrakt und öffentlich. Klassen, die eine Schnittstelle implementieren, müssen alle Methoden der Schnittstelle definieren. Eine Klasse kann mehrere Schnittstellen implementieren, wohingegen sie nur von einer einzigen abstrakten Klasse erben kann.

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.

  1. Unterschiede und Gemeinsamkeiten
    1. Instanziierung: Abstrakte Klassen können nicht direkt instanziiert werden. Schnittstellen sind kein eigenständiger Code, sondern definieren nur Methoden, die implementiert werden müssen.

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.

  1. Quellen:
    - [PHP-Handbuch zu abstrakten Klassen](https://www.php.net/manual/de/language.oop5.abstract.php)
    - [PHP-Handbuch zu Schnittstellen](https://www.php.net/manual/de/language.oop5.interfaces.php)

Diese offiziellen PHP-Dokumentationsseiten bieten detaillierte Erklärungen und Beispiele, die die hier diskutierten Konzepte und ihre Anwendung weiter veranschaulichen.


Erstellen Sie einfach Artikel, um Ihr SEO zu optimieren
Erstellen Sie einfach Artikel, um Ihr SEO zu optimieren





DinoGeek bietet einfache Artikel über komplexe Technologien

Möchten Sie in diesem Artikel zitiert werden? Es ist ganz einfach, kontaktieren Sie uns unter dino@eiki.fr

CSS | NodeJS | DNS | DMARC | MAPI | NNTP | htaccess | PHP | HTTPS | Drupal | WEB3 | LLM | Wordpress | TLD | Domain | IMAP | TCP | NFT | MariaDB | FTP | Zigbee | NMAP | SNMP | SEO | E-Mail | LXC | HTTP | MangoDB | SFTP | RAG | SSH | HTML | ChatGPT API | OSPF | JavaScript | Docker | OpenVZ | ChatGPT | VPS | ZIMBRA | SPF | UDP | Joomla | IPV6 | BGP | Django | Reactjs | DKIM | VMWare | RSYNC | Python | TFTP | Webdav | FAAS | Apache | IPV4 | LDAP | POP3 | SMTP

| Whispers of love (API) | Déclaration d'Amour |






Rechtliche Hinweise / Allgemeine Nutzungsbedingungen