Schnittstelle
PHP-Klassen sind einzelne vererbte, d. h. Mehrfachvererbung wird nicht unterstützt. Wenn eine Klasse die Funktionen mehrerer Klassen benötigt, ist die Vererbung machtlos . Aus diesem Grund hat PHP die Schnittstellentechnologie eingeführt.
Wenn alle Methoden in einer abstrakten Klasse abstrakte Methoden sind und es keine Deklaration von Variablen gibt, und alle Die Mitglieder in der Schnittstelle verfügen alle über öffentliche Berechtigungen, daher wird diese spezielle abstrakte Klasse als Schnittstelle bezeichnet
Die Schnittstelle wird mit dem Schlüsselwort interface definiert, und Implementierungen werden zum Implementieren der Schnittstellenmethoden verwendet und müssen vollständig implementiert sein
Implementieren Sie eine Schnittstelle
Das Folgende ist ein praktisches Beispiel für die Implementierung einer PHP-Schnittstelle. Hier wird eine Schnittstelle namens IPillage erstellt und implementiert:
interface IPillage { function emptyBakAccount(); function burnDocument(); }
Dann implementieren Sie diese Schnittstelle über die Executive-Klasse:
class Executive extends Employee implements IPillage { private $totalStockOptions; function emptyBankAccount() { echo "Call CFO and ask to transfer funds to Swiss bank account."; } function burnDocuments() { echo "Torch the office suite."; } }
Es kann eine Assistant-Klasse geben, die diese Schnittstelle implementiert:
class Assistant extends Employee implements IPillage { function takeMome() { echo "Taking memo..."; } function emptyBankAccount() { echo "Go on shopping spree with office credit card."; } function burnDocuments() { echo "Start small fire in the trash can."; } }
Wie Sie sehen können , die Schnittstelle ist besonders nützlich. Denn obwohl sie definieren, wie viele Methoden erforderlich sind, um ein bestimmtes Verhalten hervorzurufen, sowie die Namen der einzelnen Methoden, ermöglichen Schnittstellen verschiedenen Klassen, diese Methoden auf unterschiedliche Weise zu implementieren. In diesem Beispiel brennt die Assistdnt-Klasse für die Methode zum Brennen von Dateien einfach die Dateien im Papierkorb, während die Executive-Klasse dies auf eine extremere Art und Weise tut (ihr Büro verbrennen).
Mehrere Schnittstellen implementieren
Es wäre unfair, wenn wir externen Auftragnehmern erlauben würden, in das Unternehmen einzudringen, schließlich wurde das Unternehmen mit dem Einsatz aller Vollzeitkräfte aufgebaut Mitarbeiter. Das heißt, wie stellt man den Mitarbeitern Arbeitsplätze zur Verfügung und greift in die Unternehmensfunktionen ein, während man die Auftragnehmer auf die Erledigung der erforderlichen Aufgaben beschränkt? Die Lösung besteht darin, diese Aufgaben in mehrere Aufgaben aufzuteilen und dann die erforderlichen mehreren Schnittstellen zu implementieren. PHPS unterstützt diese Funktion. Betrachten Sie das folgende Beispiel:
<?php interface IEmployee{...} interface IDeveloper{...} interface IPillage{...} class Employee implements IEmployee,IDeveloper,iPillage { ... } class Contractor implements IEmployee,IDeveloper { ... } ?>
Der Unterschied zwischen abstrakten Klassen und Schnittstellen
Eine Schnittstelle ist eine spezielle abstrakte Klasse, die auch als betrachtet werden kann Modell. Spezifikation. Der allgemeine Unterschied zwischen einer Schnittstelle und einer abstrakten Klasse ist wie folgt:
Wenn eine Unterklasse eine Schnittstelle implementiert, muss sie alle Methoden in der Schnittstelle implementieren (unabhängig davon, ob sie benötigt werden oder nicht). Es müssen nur die erforderlichen Methoden implementiert werden.
Wenn sich der in einer Schnittstelle definierte Methodenname ändert, müssen alle Unterklassen, die diese Schnittstelle implementieren, den Methodennamen synchron aktualisieren. Wenn sich der Methodenname in einer abstrakten Klasse ändert, muss die entsprechende Methode aktualisiert werden Der Name seiner Unterklasse wird nicht beeinflusst, aber es ist nur eine neue Methode
Abstrakte Klassen können nur auf eine einzige Weise geerbt werden. Wenn eine Unterklasse Funktionen implementieren muss, die von mehreren übergeordneten Klassen erben müssen, muss sie eine Schnittstelle verwenden
Codebeispiel
<?php /** * 声明接口Demo * */ interface Demo { const NAME = "wangzhengyi"; const AGE = 25; function fun1 (); // 声明方法默认是public abstract function fun2 (); } /** * 声明接口的继承Demo2 * * @author wzy * */ interface Demo2 extends Demo { function fun3 (); function fun4 (); } /** * 声明接口Demo3 * * @author wzy * */ interface Demo3 { function fun5 (); function fun6 (); } /** * 声明父类ParentClass * * @author wzy * */ class ParentClass { function fun7 (); } /** * 子类必须实现接口中所有的方法 * * @author wzy * */ class ChildClass extends ParentClass implements Demo2, Demo3 { function fun1 (); function fun2 (); function fun3 (); function fun4 (); function fun5 (); function fun6 (); }
Das obige ist der detaillierte Inhalt vonWie werden Schnittstellen in PHP verwendet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!