| | | | |
| | |
| Erfahrener Benutzer | Ich habe auch den Sinn von interfaces erst nicht so recht wahrnehmen wollen. Aber in bestimmten Umgebungen macht es tatsächlich Sinn. Obwohl sehr knapp gehalten, fand ich diese kurze Zusammenfassung recht einleuchtend... Da wird auch erklärt, daß man Konstanten in Interfaces definieren kann) |
| |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | ||||
| Erfahrener Benutzer Registriert seit: 24.05.2009
Beiträge: 158
![]() | Zitat:
Zitat:
Zitat:
__________________ Eine Antwort oder Lösung habe ich nicht immer, aber zu 99,9% eine Idee. (200 Posts Limit) | |||
| |
| | |
| moderatives Dielektrikum Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | Der letzte Satz ist unverständlich. Ich sprach auch von „begreifen“. Ein Interface ist eine Schablone, was haben da konkrete Vorgabewerte drin zu suchen? Man weiss doch später gar nicht, was damit alles umgesetzt wird. Ein Vorgabewert macht nur dann einen Sinn, wenn er auch genautzt wird. Dazu ist imho aber eine Klasse zwischen Interface und Endobjekt besser geeignet, von der dann abgeleitet wird. Ein Interface ist auch nicht zum Ändern gedacht. Und was Du als "Auffallen" bzeichnest, wäre unter Umständen eine Katastrophe.
__________________ -- One pixel is still too big. Please make it smaller. ASAP. Initiative Mittelstand. Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers. -- |
| |
| | ||
| Erfahrener Benutzer Registriert seit: 24.05.2009
Beiträge: 158
![]() | Ein Beispiel für ein default Wert wäre ein Standard Port wie 11211 für dem Memcache. Zitat:
Sicher würde man sie es "deprecated" setzen und später komplett ändern / ersetzen aber das sie als einmal gecodet und auf ewig haltbar gelten, das gibt es bei der Programmierung nicht.
__________________ Eine Antwort oder Lösung habe ich nicht immer, aber zu 99,9% eine Idee. (200 Posts Limit) Geändert von Celli (30.06.2009 um 15:01 Uhr). | |
| |
| | |
| moderatives Dielektrikum Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | Doch. Dann wird eben mit c&p ein neues Interface erstellt. Schon der Abwärtskompatibilität halber kannst Du nicht einfach ein Interface ändern. Nachhaltiger Code ist i.A. eher ein Merkmal guten Softwaredesigns. Ein Interface sollte imho auch nicht zu spezifisch sein. Deshalb hat der Memcache und dessen Port wohl eher was in der Implementierung verloren. Ein Interface wäre dann vielleicht "Cachable" wit "write" und "load", ohne sich jedoch auf eine konkrete Caching-Art festzulegen.
__________________ -- One pixel is still too big. Please make it smaller. ASAP. Initiative Mittelstand. Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers. -- |
| |
| | ||
| Erfahrener Benutzer Registriert seit: 14.06.2009
Beiträge: 1.733
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | Mehr gefährliches Halbwissen und krude Interpretationen. Zitat:
Das Interface könnte man einsetzen, wenn eine andere Klasse, die nicht in erster Linie "logger" ist, auch als "logger" eingesetzt werden können soll -- also quasi die Fähigkeit hat, als "logger" verwendbar zu sein. Code: interface logger
{
public function open();
public function write($msg);
public function close();
}
class MyFrontController implements logger
{
public function open() {}
public function write($msg) {}
public function close() {}
public function displayPage() {}
}
Aber was, wenn es Klassen wie Logger_File gibt, die die Methoden geschickter erben sollten, und auf der anderen Seite Klassen wie MyFrontController, die die Methoden geschickter implementieren sollten? Eine Klasse "logger" zum Vererben und ein Interface "logger" zum Implementieren? Klingt irgendwie redundant. -- Vielleicht ja so: Code: interface logger
{
public function open();
public function write($msg);
public function close();
}
abstract class LoggerProto implements logger {}
class Logger_File extends LoggerProto
{
public function open() {}
public function write($msg) {}
public function close() {}
}
* * * Ich habe neulich mal versucht, zu erklären, was genau das "Iterator"-Interface (SPL) ist. Der leicht aktualisierte Text: "Iterator" ist ein Interface, also eine Schnittstelle, die etwas über eine grundlegende Eigenschaft (im Sinne von "Verwendbarkeit") der Klasse aussagt. Hier eben, dass sie "iterierbar" ist, was sich praktisch unter anderem dadurch auswirkt, dass sie mit dem foreach-Konstrukt durchlaufen werden kann. Der Interface-Name irritiert etwas, er könnte eigentlich auch "Iterable" lauten (vgl. "Serializable"). Es gibt die mehr oder weniger treffende Analogie, dass Interfaces Adjektiven entsprechen. Das passt meiner Ansicht nach, leitet jedoch begrifflich etwas in die Irre. Häufig wird ein Interface dann eingesetzt, wenn man ausdrücken möchte: "Ein Objekt dieser Klasse kann sich wie ein Objekt einer anderen Klasse verhalten." Das ist der Schnittstellen-Gedanke. Es hat also die Eigenschaft, sich wie ein anderes Objekt verhalten zu können. Das wäre der Adjektiv-Gedanke. Ein reichlich akademisches Beispiel, das man in der Praxis anders lösen würde: Code: class MyGuestbook implements ContentObject {}
class MyNavigation implements SidebarObject {}
In diesem Fall würde man übrigens sicherlich darauf verzichten, überhaupt Interfaces einzusetzen, und Vererbung verwenden, da MyGuestbook logisch selbst zu den ContentObject-Objekten zählt und mit seiner Funktionalität nur einen Grundtyp von ContentObject erweitert. (Um die beliebten Fahrzeug-Analogien zu bemühen: Ein BMW ist ein Auto (mit allem, was ein Auto ausmacht), er kann sich nicht bloß auch wie eins verhalten.) Wenn MyGuestbook auch als WordpressObject (sagen wir mal, Wordpress stellt die Klasse bereit) genutzt werden können soll -- was nicht generell für jedes ContentObject gilt, weil unser Projekt nichts mit Wordpress am Hut hat -- dann wäre das ein Einsatzgebiet für ein Interface. Das heißt zusammengefasst: In der Regel reicht Vererbung aus, eigene Interfaces definiert man eher selten. -- Ich habe lange Zeit den Fehler gemacht, "ist auch als Object verwendbar" (Interface) und "ist ein Object" (Vererbung) zu vermischen. * * * So wirklich gefällt mir der Erklärungsversuch noch nicht. Ich habe das Gefühl, mich ein wenig zu verrennen und den "Lenkbar"-Gedanken zu sehr außen vor zu lassen. *schulterzuck* | |
| |
| | |
| moderatives Dielektrikum Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | Ich würde den implements {interface} Gedanken als Vereinbarung beschreiben - Das Objekt/die Klasse verpflichtet sich, vom Interface vorbestimmte Methoden zu schaffen/anzubieten (zu implementieren). Als Gegenleistung ist dieser Teil der Klasse/des Objekts normiert, d.h. allein durch die kurze Interface-Deklaration vollständig beschrieben. Je nach Normierungswillen kann man alle public Methoden eines Objektes vollständig auf ein oder mehrere Interfaces abbilden. Die Interface-Implementierung sagt also nichts über die Zugehörigkeit oder Ableitung von einem anderen Objekt aus. Ein Interface sollte einzig Funktionalitäten beschreiben. Wenn man zur Überlegung kommt: "die Klasse braucht diese Methoden, passt aber thematisch nicht zum Interface" dann hat man letzteres falsch angelegt. Z.B. zu speziell oder zu allgemeingültig.
__________________ -- One pixel is still too big. Please make it smaller. ASAP. Initiative Mittelstand. Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers. -- |
| |
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Sinn und Zweck abstracter klassen und interfaces | litterauspirna | PHP Tipps 2009 | 8 | 13.06.2009 00:14 |
| Mehrere Klassen verknüpfen | BlackJack01090 | Software-Design | 9 | 26.05.2009 20:43 |
| wie Passwortschutz richtig anwenden? | ricardo | PHP Tipps 2009 | 13 | 19.01.2009 16:39 |
| SOAP Server Parameter richtig zuordnen | Anotherone | PHP Tipps 2008 | 0 | 12.12.2007 11:23 |
| Parameter überschreiben | Igäl | PHP Tipps 2006 | 8 | 04.06.2006 19:55 |
| Parameter der mysql.exe richtig übergeben | bendigo | Datenbanken | 5 | 24.11.2005 13:31 |
| NOT EXISTS und NOT IN richtig anwenden | Datenbanken | 6 | 11.08.2004 09:23 | |
| Besucher kamen über folgende Suchanfragen bei Google auf diese Seite |
| interfaces adjektive |