Hi!
Ich suche ein PHP-Script, was über Datenstrukturen mit einer DB kommuniziert ohne scriptinterne SQL-Statements zu verwenden. Geht das nur mit so mächtigen Frameworks wie im Wiki genannt?
Nein. Aber kleine Scripts sind mit dem EVA-Prinzip in der Regel überschaubar genug strukturiert. Niemand hindert dich jedoch, das SQL-Statement in eine Funktion zu packen, um dir einen DAL zu bauen.
Ok, das ist der erste Schritt, der auch in PHP sehr gut machbar ist: Objekterstellung, Methoden aufrufen.
Dann iterierst du aber zweimal über die Daten, einmal die Fetch-Schleife um das Rückgabe-Array zu erstellen und dann die Ausgabe-Schleife über dieses Array.
Bei kleinen Array ist das ok. Wenn es absehbar ist, dass ein Result ein bischen größer wird (oder wenn es eben nicht absehbar ist, wie groß das wird, maximal-Grenze festlegen), ist eine Callback-Funktion (CB) angebracht: damit liegt nicht die gesamte Tabelle im Hauptspeicher sondern nur ein Record, während der Iteration innerhalb der DB-Class bringt die CB die Daten sofort auf die Ausgabe.
Selbst wenn PHP so clever ist, bei Zuweisungen an andere Variablen keine wirklichen Kopien sondern Quasi-Referenzen der Daten erzeugt, solange sie sich nicht ändern, hast du immer noch den Zeitaufwand des Iterierens, der damit Teil der Kosten für deinen DAL ist.
Es hat alles seinen Preis/Kosten. Frameworks sind mächtige und respektable Gesellen. Ich möchte nicht mit Kanonen auf Spatzen schießen, ich möchte es verstehen. Die Trennung von DAL?AL muss nicht um jeden Preis erfolgen, das ist auch für mich ein bischen Neuland worauf noch Einiges zu optimieren ist. Optimierungen sind im Prinzip dieselben, nur anders verpackt und an einer anderen Stelle: in der Vermittlungsschicht.
Beispiel Darstellung eines Tree in einem Forum: Gebraucht werden nur die URLs und die jeweiligen Title, damit kann der Tree dargestellt werden. Es wäre bei einem
tie %forum;
etwas ungeschickt, mehr als das, was gebraucht wird, in den RAM zu laden. Wenn in %forum (url => title) steht, reicht das vollkommen. Anders hingegen, wenn eine Nachricht dargestellt werden soll, dazu der gesamte Thread als Teilbaum. Der Kompromiss besteht darin, für alle zum Teilbaum gehörigen Nachrichten die komplette Attributliste einzulesen, auch wenn das Attribut 'mesg' nur einer Nachricht gebraucht wird.
Hotti