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.
Aufgabe
EinfachLassen 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 namensMessageable, das zwei Methodensignaturen deklariert:compose($content)zum Erstellen einer Nachricht unddeliver()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-Funktioninterface_exists(), um zu prüfen, obMessageableexistiert. Verwenden Sie dann dieReflectionClass, um Ihr Interface zu inspizieren und seine Methoden aufzulisten. Erstellen Sie eine Reflection Ihres Interfaces, rufen Sie dessen Methoden mitgetMethods()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
?>Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDas $this-SchlüsselwortMethodenEigenschaftenKonstruktor (__construct)Destruktor (__destruct)Rückblick - Einfacher Taschenrechner4Vererbung
Grundlagen der VererbungDas parent:: SchlüsselwortMethoden überschreibenDas final SchlüsselwortAbstrakte KlassenZusammenfassung – Mitarbeiter-Hierarchie7Kapselung
Public, Protected, PrivateZugriffsmodifikatoren im DetailGetter und SetterInformation HidingConstructor Promotion (8.0)Zusammenfassung – Studentenverwaltungssystem2Namensräume & Autoloading
Einführung in NamensräumeDas use-SchlüsselwortPSR-4 Autoloading-StandardComposer AutoloaderZusammenfassung – Organisiertes Projekt5Interfaces & Verträge
Einführung in InterfacesInterfaces implementierenMehrfache Interface-ImplementierungInterface vs. Abstrakte KlasseType Hinting mit InterfacesZusammenfassung – Formen-Rechner8Magische Methoden
Einführung in magische Methoden__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Objekt-Klonen__serialize & __unserializeZusammenfassung - Eigene Collection11Typsystem & Fehlerbehandlung
TypdeklarationenNullable-TypenUnion- & Intersection-TypenException-KlassenEigene Exception-HierarchieTry, Catch, FinallyZusammenfassung - Formular-Validator14Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen3Klasseneigenschaften
Instanz- vs. statische EigenschaftenKonstanten in KlassenStatische Methoden & EigenschaftenPrivate & geschützte EigenschaftenReadonly-Eigenschaften (PHP 8.1)Zusammenfassung – Bankkonto-Manager6Polymorphismus
Method Overriding erneut betrachtetPolymorphismus über InterfacesType Hinting & Union TypesLate Static BindingZusammenfassung – Payment Processor9Traits
Einführung in TraitsVerwendung mehrerer TraitsKonfliktlösung bei TraitsAbstrakte Methoden in TraitsTraits vs. Vererbung12Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster15Abschlussherausforderungen
E-Learning-PlattformBanksystemSpielcharakter-EntwicklungFahrzeugvermietung