dedlfix: Umsetzung der Trennung von PHP- und HTML-Code / des EVA-Prinzips

Beitrag lesen

Hi!

Würde ich versuchen, hier Verarbeitung und Ausgabe zu trennen - was käme da dann raus?
Ich müsste doch $result bzw. die einzelnen Zeilen zwischenspeichern, um dann die while-Schleife mit $format und printf in einen Ausgabe-Teil zu verschieben. Wobei ich dann dort $result verarbeiten müsste, was doch ziemlich nach „Verarbeitung“ und nicht nur nach “Ausgabe“ riecht (mein Problem dann also nichtmehr Ausgabe während der Verarbeitung sondern Verarbeitung während der Ausgabe wäre …).

"Ausgabe" beschränkt sich nicht nur auf echo und Konsorten, vielmehr ist mit diesem Teil die Ausgabelogik gemeint. Wenn also für die Ausgabe ein Array mit Datensätzen zu durchlaufen ist, und (abgesehen davon, dass man das mit modernem CSS machen kann) jede zweite Zeile eine andere Formatierung bekommen soll, dann ist die foreach-Schleife, das Umschalten des Zweite-Zeile-Flags und das if, um darauf zu testen, nicht Verarbeitungs- sondern Ausgabelogik.

Ein weiteres Beispiel wäre ein Fehlerfall. Die Information, ob ein Fehler vorliegt (und auch welches Eingabeelement er betrifft, wenn es nicht grad ein allgemeiner Fehler ist) wird in der Verarbeitungslogik ermitteln. Die Ausgabelogik prüft darauf und gibt entweder eine Fehlermeldung aus oder das was im Gutfall auszugeben ist.

Ähnlich schwer tue ich mich an dieser Stelle des Codes[2]:
// Abfrage der Bestätigung, falls ein Konto zum Löschen markiert wurde
if (set_not_empty('post', 'delete_account_id') && set_not_empty('post', 'delete_account_name') && set_not_empty('post', 'delete_account_owner_name'))

Das ist Verarbeitungslogik. Die erstellt für die Ausgabelogik eine boolesche Variable. Die A. muss das da oben alles nicht wissen. Sie muss nur entscheiden können, ob dies oder jenes auszugeben ist.

Wie macht man’s richtig?

Ein absolutes "Richtig" oder "Falsch" gibt es nicht. Die Antwort kann eigentlich nur lauten: So, dass man die Aufgabenstellung leicht im Code nachvollziehen kann, dass Änderungen einfach ohne riesige Auswirkungen auf den Rest des Programms erledigt werden können.

Wie stelle ich es an, dass ich meinen HTML-Code nicht in den PHP-Code mische, wenn es nicht nur um die bloße Ersetzung von Platzhaltern im HTML durch Textfragmente geht (wie etwa hier diskutiert), sondern ich wie in meinen Beispielen oben HTML-Code tatsächlich generieren muss? Mir scheint es fast widersprüchlich, zu versuchen, HTML- und PHP-Code voneinander zu trennen, wenn mein Ziel doch ist, mit Hilfe von PHP HTML zu generieren.

Eben. HTML muss nicht von PHP getrennt werden, sondern die Verarbeitungsschritte und -teilschritte sollten klar definiert sein und mit überschaubaren Schnittstellen mit dem Rest des Programms kommunizieren.

Das Thema ist übrigens grad vor drei Tagen diskutiert worden: Trennung der Anliegen (Logik - Layout).

[2]: Die Funktion set_not_empty() ist eine vorher im Programmablauf definierte Funktion, die im Prinzip nur isset() und $foo != '' zusammenfasst.

Dafür gibt es empty().

Lo!