Tatsächlich hat die PHP-Schnittstelle ihren Zweck.
Es handelt sich um Verträge, Bedienungsanleitungen für andere Entwickler. Es ist jedoch immer noch schwierig zu verstehen, wofür die Schnittstelle verwendet wird.
Basic
Interface ist eine abstrakte Klasse, die nicht direkt instanziiert, aber implementiert werden kann.
Dies ist ein einfaches Beispiel
interface MyInterface { public function setName(string $name); public function getName(); } class MyClass implements MyInterface { private $name; public function setName(string $name) { $this->name = $name; } public function getName() { return $this->name; } }
MyClass
muss die Methoden setName()
und getName()
implementieren. Wenn Sie dies nicht tun, erhalten Sie einen schwerwiegenden Fehler.
Fataler Fehler: Klasse MyClass enthält 2 abstrakte Methoden und muss daher als abstrakt deklariert werden oder die restlichen Methoden (MyInterface::setName, MyInterface::getName) implementieren
Zusätzlich sind die in definierten Methoden Die Barrierefreiheit der Schnittstelle muss öffentlich sein und Klassenmitglieder können nicht in der Schnittstelle definiert werden.
Ursache
Entwickler verwenden Schnittstellen, um das allgemeine Verhalten einer Klasse oder einer Gruppe von Klassen zu beschreiben.
Aber warum ist es nur für die Kapselung der Implementierung verantwortlich und nicht für die Handhabung der Details jeder Klasse?
Zum Entkoppeln! Mit der
-Schnittstelle können Sie die Implementierung ändern, ohne die Details zu ändern, d. h. wie Sie diese Implementierung verwenden.
Weiterführende Beispiele
Die folgende Funktionalität ist für jedes Caching-System erforderlich
Auf dieser Grundlage können wir die folgende Cache-Schnittstelle erstellen
interface CacheInterface { public function set(string $key, $val); public function get(string $key); public function delete(string $key); }
Auf diese Weise können Entwickler wissen, dass sie die Cache-Schnittstelle implementieren müssen. Wir müssen nicht wissen, wie sie implementiert werden. Das Ergebnis ist, dass wir das Cache-System problemlos wechseln können, ohne die Art und Weise seiner Verwendung zu ändern
Daher ist es einfach, das Cache-System zu ändern, ohne die Art und Weise zu ändern, wie das Cache-System im Projekt verwendet wird.
Symfony-Beispiel
Sehen wir uns jetzt die konkrete Anwendung des Beispiels an. Wenn Sie für Symfony ein Caching-System implementieren möchten, ist es am besten, dies wie folgt zu tun:
use Symfony\Contracts\Cache\CacheInterface; class MyClass { private $cache; public function __construct(CacheInterface $cache) { $this->cache = $cache; } }
Injizieren Sie die Cache-Schnittstelle durch Abhängigkeitsinjektion in unsere Klasse. Wenn wir das Cache-System das nächste Mal ändern, muss die MyClass-Klasse keine Änderungen vornehmen.
Mehrere Implementierungen vs. Mehrfachvererbung
PHP unterstützt keine Mehrfachvererbung, die folgende Methode ist nicht möglich
class MyClass extends ClassX, ClassY {}
Teil davon Der Grund, warum dies nicht zulässig ist, liegt am Diamond-Problem.
Sie können es jedoch
class ClassY extends ClassX {} class MyClass extends ClassY {}
tun, aber ClassX
und ClassY
können unterschiedliche Dinge behandeln, also die Vererbung verwenden macht keinen Sinn.
Wenn Sie mehrere Verhaltensweisen ausführen möchten, können Sie mehrere Schnittstellen haben
class MyClass implements InterfaceX, InterfaceY {}
Mit anderen Worten, Sie können dafür sorgen, dass einige Klassen einen Teil der Funktionalität teilen, anstatt eine übergeordnete Klasse zu teilen.
Zusammenfassung
PHP-Schnittstelle ist eine Methodenvorlage einer Klasse, die für die entkoppelte Implementierung und Verwendung sehr hilfreich ist.
Diese Funktion ist besonders nützlich, wenn Sie Flexibilität wahren und sicherstellen müssen, dass alle Entwickler eine Reihe von Regeln befolgen.
[Verwandte Tutorial-Empfehlungen: „PHP-Tutorial“]
Das obige ist der detaillierte Inhalt vonSprechen Sie über die Verwendung der Schnittstelle in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!