Wann Interfaces in PHP zu verwenden sind

9

Ich habe es immer schwer gehabt, den wirklichen Wert von Interfaces zu verstehen, wenn ich mit Objekten in PHP arbeite (das könnten andere Sprachen sein, die ich mir vorstelle)

Nach meinem Verständnis verwenden Sie Interface , um sicherzustellen oder zu garantieren, dass, wenn eine Klasse Interface verwendet, diese Klasse über die Methoden verfügt, die in Interface innerhalb dieser Klasse definiert sind.

Würde das also nicht bedeuten, dass Sie nur ein Interface nützlich finden, wenn Sie mehr als eine Klasse definieren, die diese Methoden benötigt?

Um es klarer zu sagen: Wenn ich eine Klasse habe, die eine Sache macht und keine andere Klasse das tun muss, dann wäre es sinnlos, eine Interface für diese Klasse zu verwenden?

Sie würden also nicht Interface für jede Klasse verwenden, die Sie richtig haben?

PS) Wenn du diese Frage als exact duplicate wählst, dann hast du die Frage und nur den Titel nicht gelesen, da ich die meisten ähnlichen Fragen bereits gelesen habe

    
JasonDavis 18.12.2011, 14:51
quelle

1 Antwort

11
  

Soweit ich verstehe, verwenden Sie eine Schnittstelle, um zu erzwingen oder zu garantieren   Wenn eine Klasse eine Schnittstelle verwendet, hat diese Klasse die   Methoden, die in der Schnittstelle innerhalb dieser Klasse definiert sind.

Das ist eigentlich nur die Hälfte des Deals (der technische Teil). Es gibt auch die wichtige Architektur Hälfte, die erscheint, wenn Sie die Schnittstelle konsumieren und es so geht:

%Vor%

(Alternativ könnte auch eine "factory" -Funktion, die dokumentiert ist, dass sie eine Instanz zurückgibt, die IAnimal implementiert, ebenfalls als Beispiel dienen.)

Die Idee hier ist, dass der Verbraucher der Schnittstelle sagt: "Ich möchte ein Tier zu füttern. Es ist mir egal, ob es fliegt, geht oder kriecht. Es ist mir egal, ob es groß oder klein ist. Ich nur Sorge dafür, dass es einige Merkmale mit allen anderen Tieren teilt "- Merkmale, die die Definition der Schnittstelle umfassen würde.

Mit anderen Worten dienen Schnittstellen dazu, den Vertrag (Schnittstelle) von der konkreten Implementierung (Klassen) zu abstrahieren. Dies gibt Implementierern von konkreten Klassen eine freie Hand, um Implementierungen zu modifizieren, umzubenennen, zu entfernen und hinzuzufügen, ohne den Code für Benutzer der Schnittstelle zu unterbrechen, was nicht möglich ist, wenn Sie direkt in Ihrer API auf konkrete Klassen verweisen.

Was die Schnittstelle betrifft, die nur von einer Klasse implementiert wird: Das sind nicht genug Informationen, um zu entscheiden. Wenn es in der Zukunft plausibelere Implementierungen der Schnittstelle geben kann, dann macht es sicherlich Sinn (zum Beispiel: eine IHashFunction -Schnittstelle würde Sinn ergeben, selbst wenn Sha1HashFunction aktuell die einzige verfügbare Implementierung wäre ). Sonst bietet es nichts.

    
Jon 18.12.2011, 14:57
quelle

Tags und Links