Menu
Coddy logo textTech

Einführung in Schnittstellen

Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy. Lektion 27 von 91.

Ein Interface definiert einen Vertrag, den Klassen einhalten müssen. Im Gegensatz zu abstrakten Klassen, die sowohl abstrakte als auch konkrete Methoden enthalten können, deklariert ein Interface nur Methodensignaturen ohne jegliche Implementierung. Stell es dir als ein Versprechen vor: Jede Klasse, die ein Interface implementiert, garantiert, dass sie diese spezifischen Methoden bereitstellt.

Du definierst ein Interface mit dem Schlüsselwort interface:

<?php
interface Printable {
    public function print();
}

Dieses Interface erklärt, dass jede Klasse, die Printable implementiert, eine print()-Methode haben muss. Das Interface kümmert sich nicht darum, wie die Methode funktioniert, sondern nur darum, dass sie existiert.

Hier ist ein einfaches Beispiel, das die grundlegende Struktur zeigt:

<?php
interface Drivable {
    public function start();
    public function stop();
}

Beachte, dass Schnittstellenmethoden keinen Rumpf haben, sondern nur die Signatur, die mit einem Semikolon endet. Alle Methoden in einer Schnittstelle sind implizit öffentlich, daher kannst du private oder protected nicht verwenden.

Schnittstellen sind leistungsfähig, weil sie es voneinander unabhängigen Klassen ermöglichen, gemeinsames Verhalten zu teilen. Ein Car und ein Motorcycle haben möglicherweise in Bezug auf die Vererbung nichts gemeinsam, aber beide können Drivable implementieren, um zu garantieren, dass sie über die start()- und stop()-methods verfügen.

Wichtiger Punkt: Ein Interface legt fest, welche Methoden eine Klasse haben muss, nicht, wie sie funktionieren sollen. Es stellt einen Vertrag auf, den implementierende Klassen erfüllen müssen.

challenge icon

Aufgabe

Einfach

Erstelle ein einfaches Nachrichtensystem, das dich mit Interfaces vertraut macht. Du definierst ein Interface, das einen Vertrag dafür festlegt, wie Nachrichten verarbeitet werden sollen, und damit die Grundlage für die implementierenden Klassen schafft, die du in der nächsten Lektion erstellen wirst.

Du wirst deinen Code auf zwei Dateien verteilen:

  • Messageable.php: Definiere ein Interface namens Messageable, das zwei Methodensignaturen deklariert: compose($content) zum Erstellen einer Nachricht und deliver() zum Senden. Denke daran: Interface-Methoden haben keinen Rumpf, sondern nur die Signatur, die mit einem Semikolon endet.
  • main.php: Binde die Datei Messageable ein. Um zu überprüfen, ob dein Interface korrekt definiert ist, verwende die PHP-Funktion interface_exists(), um zu prüfen, ob Messageable existiert. Verwende dann ReflectionClass, um dein Interface zu untersuchen und seine Methoden aufzulisten. Erstelle eine Reflection deines Interfaces, rufe seine Methoden mit getMethods() ab (was ReflectionMethod-Objekte zurückgibt) und gib den getName() jeder Methode in einer eigenen Zeile aus.

Deine Ausgabe sollte die beiden Methodennamen anzeigen, die dein Interface deklariert, jeweils in einer eigenen Zeile und in der Reihenfolge, in der du sie definiert hast.

Diese Aufgabe konzentriert sich ausschließlich auf das Definieren eines Interfaces: des Vertrags, den zukünftige Klassen erfüllen müssen. Du legst fest, welche Methoden vorhanden sein müssen, ohne dir Gedanken darüber zu machen, wie sie funktionieren werden. Diese Implementierung kommt in der nächsten Lektion!

Probier es selbst

<?php
// Die Messageable-Interface-Datei einbinden
require_once 'Messageable.php';

// TODO: Verwende interface_exists(), um zu prüfen, ob das Messageable-Interface existiert

// TODO: Erstelle ein ReflectionClass-Objekt für das Messageable-Interface

// TODO: Hole die Methoden mit getMethods()

// TODO: Durchlaufe die Methoden und gib jeden Methodennamen in einer eigenen Zeile aus

?>
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-PHP-Compiler