dedlfix: Was bewirkt ein Dollarzeichen mit geschweifter Klammer um Array?

Beitrag lesen

Hi!

Und dann hast du im Template solche Stellen stehen gehabt?
  <?php echo $foo ?>
Nee, einen ; hab ich auch noch... ;)

Brauchst du aber nicht. Das letzte ; vor einem ?> ist optional. Wenn man ihn vergisst, wenn der Code erweitert wird, ist das auch nicht schlimm, das bekommt man sofort beim ersten Test als Syntaxfehler präsentiert. Und bei den vielen kleinen Stellen wie oben ist er verzichtbar.

Das wäre nicht gut, denn dann fehlte in der Regel ein htmlspecialchars(). Es anderswo im Code zu verwenden macht es nicht einfacher, zu erkennen, dass es da ist, besonders wenn du dann noch mit v.V. hantierst.

Hmm, dererlei Validitätsprüfungen übernimmt die Templateklasse.

Wieso Prüfung? Unbehandelte Werte erzeugen u.U. syntaktische Fehler im Ergebnis und müssen vermieden werden. Da gibt es nichts zu prüfen, nur kontextgerecht zu handeln.

function h($name) {
    echo htmlspecialchars($GLOBALS['templatevalues'][$name]);
  }

Den Ansatz finde ich wiederrum ungeschickt, immerhin kann es passieren dass mehrere Templates die gleichen Keys beinhalten, die werden dann im GLOBALS-Array vom letzten Wert überschrieben...

Wo ist denn der Unterschied zwischen vielen Variablen innerhalb eines Gültigkeitsbereiches und vielen Elementen eines Array? Überschreiben kann man in beiden Situationen. Unaufmerksam und ungetestet programmieren sollte man weder da noch da.

Wenn du eine Klasse verwendest, brauchst du natürlich auch kein $GLOBALS, denn dann kannst du ja eine Eigenschaft als Wertecontainer nehmen. Und h() wäre dann eine Methode der Klasse.

Der Ansatz, den Zugriff innerhalb des Templates nochmal zu kapseln klingt nicht unvernünftig,

Wieso kapseln? Ich sammle die Werte lediglich an einem Ort: in einem Array. (Man braucht dann auch weniger auf Namenskonflikte zu achten, als bei vielen globalen Variablen.) Da ist nichts gekapselt. Kapseln bedeutet den Zugriff abzuschirmen. Und h() in meinem Beispiel schirmt nicht ab, sie ist nur ein Hilfsmittel zur Praktikabilität und Übersichtlichkeit.

ich lass mich aber immer gern von den "Großen" inspirieren, Codeigniter und das Zend Framework machen es auch nicht anders...

Wenn du was "Großes" zur Verfügung hast, dann in der Regel auch ein Projekt, das dessen Verwendung rechtfertigt. Dann solltest du auch entsprechend der Philosophie des "Großen" verfahren und die Diskussion, wie man es im Kleinen macht, erübrigt sich dann.

Mit der eingebauten View-Klasse des Zend Framework jedenfalls braucht es keine v.V. Da füllt man Eigenschaften eines View-Objekts mit den Werten.

Lo!