Menu
Coddy logo textTech

Einführung in Interfaces

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

Ein Interface definiert einen Vertrag, dem Klassen folgen 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. Betrachten Sie es als ein Versprechen: Jede Klasse, die ein Interface implementiert, garantiert, dass sie diese spezifischen Methoden bereitstellen wird.

Sie definieren ein Interface mit dem Schlüsselwort interface:

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

Dieses Interface deklariert, dass jede Klasse, die Printable implementiert, eine print()-Methode haben muss. Dem Interface ist es egal, wie die Methode funktioniert, nur dass sie existiert.

Hier ist ein einfaches Beispiel, das die Grundstruktur zeigt:

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

Beachten Sie, dass Interface-Methoden keinen Rumpf haben, sondern nur die Signatur, die mit einem Semikolon endet. Alle Methoden in einem Interface sind implizit public, daher können Sie kein private oder protected verwenden.

Interfaces sind leistungsfähig, da sie es nicht verwandten Klassen ermöglichen, gemeinsames Verhalten zu teilen. Ein Car und ein Motorcycle haben vererbungstechnisch möglicherweise nichts gemeinsam, aber beide können Drivable implementieren, um zu garantieren, dass sie über start()- und stop()-Methoden verfügen.

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

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein einfaches Nachrichtensystem erstellen, das Sie in Interfaces einführt. Sie werden ein Interface definieren, das einen Vertrag darüber festlegt, wie Nachrichten gehandhabt werden sollen, und damit die Grundlage für die implementierenden Klassen schaffen, die Sie in der nächsten Lektion erstellen werden.

Sie werden Ihren Code in zwei Dateien organisieren:

  • Messageable.php — Definieren Sie ein Interface namens Messageable, das zwei Methodensignaturen deklariert: compose($content) zum Erstellen einer Nachricht und deliver() zum Senden dieser Nachricht. Denken Sie daran, dass Interface-Methoden keinen Body haben — nur die Signatur, die mit einem Semikolon endet.
  • main.php — Binden Sie die Datei Messageable ein. Um zu überprüfen, ob Ihr Interface korrekt definiert ist, verwenden Sie die PHP-Funktion interface_exists(), um zu prüfen, ob Messageable existiert. Verwenden Sie dann die ReflectionClass, um Ihr Interface zu inspizieren und seine Methoden aufzulisten. Erstellen Sie eine Reflection Ihres Interfaces, rufen Sie dessen Methoden mit getMethods() ab und geben Sie jeden Methodennamen in einer eigenen Zeile aus.

Ihre Ausgabe sollte die beiden Methodennamen anzeigen, die Ihr Interface deklariert, jeweils in einer separaten Zeile, in der Reihenfolge, in der Sie sie definiert haben.

Diese Herausforderung konzentriert sich rein auf die Definition eines Interfaces — den Vertrag, den zukünftige Klassen erfüllen müssen. Sie legen fest, welche Methoden existieren müssen, ohne sich Gedanken darüber zu machen, wie sie funktionieren werden. Diese Implementierung folgt in der nächsten Lektion!

Spickzettel

Ein Interface definiert einen Vertrag, dem Klassen folgen müssen. Es deklariert nur Methodensignaturen ohne jegliche Implementierung.

Definieren Sie ein Interface mit dem Schlüsselwort interface:

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

Interface-Methoden haben keinen Rumpf, nur die Signatur, die mit einem Semikolon endet. Alle Methoden in einem Interface sind implizit öffentlich.

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

Interfaces ermöglichen es nicht verwandten Klassen, gemeinsames Verhalten zu teilen, indem sie garantieren, dass sie bestimmte Methoden implementieren.

Probier es selbst

<?php
// Binde die Messageable-Interface-Datei ein
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: Rufe die Methoden mit getMethods() ab

// 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