dedlfix: Classes, magich methods, SPL, Implementierung

Beitrag lesen

echo $begrüßung;

Unbsehen glaub ich oder nehm zur Kenntnis, dass vermutlich auch in umfangreicheren Zusammenhängen da abstraktere Möglichekeiten sinnvoll sind.

Man kann natürlich immer eine Eigenschaft erstellen, die man gezielt ansprechen kann. Manchmal ist es aber schöner, wenn man nicht $objekt->eigenschaft / $objekt->methode() notieren muss sondern direkt $objekt angeben kann. Besonders an Stellen, an denen "normale" Variablen und Objekte gemischt übergeben werden können, oder man einfach die Implementierungsdetails "verstecken" will (nicht um sie zu schützen, sondern weil man sie nicht ständig benötigt und darauf hingewiesen werden will).

Wenn eine Klasse ein Interface implementiert, dann ist sichergestellt, dass die im Interface definierten Dinge in der implementierenden Klasse vorhanden sind. Ein Anwender kann ein ihm übergebenens Objekt auf instanceof Interfacename testen und sich dann sicher sein, dass die im Interface vereinbarten Dinge vorhanden und zugreifbar sind.
Also eben Code-Sichheit.

Jein. Es ist nicht die Sicherheit, die man landläufig meint, sondern eher die Sicherstellung der Einhaltung eines Vertrages.

Vermutlich steht meinem Verständnis bzw. stand immer im Wege, dass ich dachte oder hoffte, über die Implementierung eines Interfaces gleich auch Methoden mitzuimplementieren (was ja sowas wie eine multiple Vererbung wäre, bzw. dass eine Klasse von mehreren Klassen erben könnte).

Nein, nicht mit PHP. Das Interface definiert, wie sein Name suggeriert, nur wie die Schnittstelle auszusehen hat. Was konkret die implementierende Klasse tun muss, um über die Schnittstelle zu kommunizieren, ist ihr Problem. Wenn du nach bereits vorgefertigten Dingen suchst, dann halte Ausschau nach abstrakten Klassen oder Klassen mit abstrakten Methoden. Diese haben im Allgemeinen bereits Funktionalität implementiert und müssen nur noch an den abstrakten Stellen ergänzt werden. Allerdings kann man Klassen ja nur einmal beerben.

echo "$verabschiedung $name";