Hallo,
Mein Attribut 'dBase_Article' ist eine Instanz der Klasse 'dBase_Article' und wird über magic Method '__get(Access to inaccessible properties)' zur Laufzeit geschaffen, was dann den Methodenaufruf ermöglicht. Ist das (in der Templatedatei) OK, oder verstößt das gegen OOP-Grundsätze?
Also, ich verwende grundsätzlich ausschliesslich Getter und Setter um auf Instanz-Variablen zuzugreifen und nie Direkt-Zugriff.
Ok, das werde ich dann auch so handhaben, ist schon so vorbereitet.
Das liegt aber mehr an meiner eignen Arbeitsweise: Wenn ich für jede Instanz-Variable, die ich ausserhalb ändern/benutzen will einen Setter/Getter implementieren MUSS (und sei es auch nur, dass ich in Eclipse auf "Generate Getters/Setters" klicken muss :)), zwingt mich das dazu, mir genauer zu überlegen, welche Variablen nach aussen hin denn wirklich interessant /notwendig sind (und welche ich lieber "private" lasse, da andere Klassen daran eh nicht herumzufummeln haben).
Ja, so 'halb' nach draußen (obwohl der Namespace ja derselbe ist) ins Template. Magento zaubert über Magic-Methods die Getter/Setter selbst zusammen. In meinem bescheidenen kleinen Framework habe ich für die Verwendung in den Templates lediglich einen (einheitlichen) Getter:
echo $this->stash('url'); // wenn url ein String ist
echo $this->stash('addr','vname'); // wenn auf addr ein Array liegt
Dieser/mein Getter named 'stash' greift innerhalb der Response-Klasse auf das Attribut 'STASH', worin der Controller die Daten ablegt. Btw., Werte setzen, das macht bei mir nur der Controller, d.h., in den Templates gibt es nur den Getter und alles, was an Daten im Template gebraucht wird, stellt der Controller bereit.
Eine technisch fundierte Begründung kann ich aber leider nicht liefern :)
Es muss nicht immer alles technisch 'fundiert' begründet sein. Zweckmäßigkeit ist die Praxis ;)
In meinem MVC-FW kann als Alternative zu native PHP in Templates auch eine extra Template-Engine eingesetzt werden, da habe ich mich für Twig entschieden. Das Umschalten zur Twig-Engine erfolgt über ein Attribut, was zur Ausgabe des Puffers die Twig-Methode 'render' aufruft, die Übergabe der Daten fürs Template geht dann ebenfalls über das Attribut 'STASH'.
Viele Grüße,
Horst (immer noch auf der Suche nach einem Job im Rhein-Main-Gebiet)