Hi,
OK. Denke bei API immer an komplexe Schnittstellen zwischen 2 Programmen!
kann sein, dass API - also Application Programming Interfache - für eine simple PHP-Klasse oder eine einzelne Funktion etwas übertrieben ist. Ich verwende diese Abkürzung halt oft in meinem Umfeld, wo die Leute wissen was gemeint ist, auch wenn es nicht ganz der eigentlichen Definition entspricht. Sorry, hätte mich auch gleich deutlicher ausdrücken können ;)
Ich muß gestehen, trotz Eurer guten uns sehr ausführlichen Antworten bin ich immer noch nicht 100%ig dahinter gestiegen, wie ich das z.B. bei einem Online-Shop einsetzten könnte. Wie das mit den Klassen funktioniert, das weiß ich jetzt, aber ich sehe leider immer noch nicht den Vorteil in meiner Anwendung.
Versuche einmal, Teile der Anwendung (also des kompletten Shops) gedanklich zu trennen und in Module (Klassen) zusammenzufassen. Eine Gesamt-Klasse "shop" wird Dich sicherlich nicht weiterbringen, aber mehrere kleine und übersichtliche Klassen wie z.B. "shop_datenbank", "shop_html" und "shop_statistik" schon eher. Und bedenke: modular programmieren heisst nicht zwingend OOP zu machen! OOP hilft nur dabei. Du kannst Deine Shop-Module sehr wohl auch in ganz normale Funktionen packen. Dabei ist aber sehr viel Programmierdisziplin nötig, damit die einzelnen "Module" gut miteinander zusammenarbeiten.
In Deinem Fall würde ich mir eine Art Shop-Baukasten zusammenschrauben. Darunter stelle ich mir einen kleinen Satz Klassen vor, die getrennt Datenbankoperationen, HTML-Ausgabe etc. übernehmen. Für jeden neuen Shop müssten dann nur die Hauptdateien neu geschrieben werden, die z.B. mit Hilfe des Datenbankmoduls ein Produkt in den Warenkorb legen und danach den aktuellen Warenkorb mit Hilfe des DB-Moduls auslesen und mittels HTML-Modul anzeigen. Die beiden Module könnten sich dann über eine definierte Schnittstelle (API ;-), also meinetwegen ein Hash-Array mit der Produktliste, "unterhalten".
Bei mir ist ja auch noch nicht der Code richtig vom Inhalt getrennt. Irgendwie müßte ich den HTML-Teil total unabhängig vom Code schreiben können, was mir bisher nicht gelungen ist.
Dafür könntest Du freilich Templates verwenden. Klar, wenn Du z.B. Produktlisten oder Warenkorbseiten mit jeder Menge dynamischem Inhalt erzeugen möchtest, wird der Einsatz von Templates nicht gerade einfacher. Ich behelfe mir da immer mit "Sub-Templates" (meine Wortschöpfung). Damit meine ich z.B. eine Vorlage für eine einzelne Tabellenzeile, die einfach Platzhalter enthält. Im Skript gebe ich nie HTML direkt aus, sondern bediene mich der Vorlage, ersetze die Platzhalter durch Inhalte und gebe das Ergebnis aus. Meistens habe ich am Ende eines Projektes immer einen Satz von Seitentemplates und einen Satz kleinerer "Sub-Templates", die das Aussehen bestimmter dynamischer Elemente bestimmen.
Natürlich muss dieser ganze Aufwand im Einklang mit der Performance der Anwendung stehen. Es macht keinen Sinn ein superuniverselles Shopsystem zu haben, das vor lauter Anpassparkeit nur auf Seiten < 10 Besucher/Tag einsetzbar ist. Hier gilt es auch Kompromisse zu finden.
So, das war jetzt ne ganze Menge, ich hoffe Du verstehst jetzt genauer meine Problematik :)
Das tue ich, aber wahrscheinlich ist das ganze im RL oder im Chat leichter auszudiskutieren ;-)
Viele Grüsse
Achim Schrepfer