ich möchte ein System in PHP schreiben, was relativ offen ist und modular aufbau-/ausbaubar ist.
Ich habe es mir so vorgestellt, dass jegliche Kommunikation der einzelnen Module über einen Module-Handler funktioniert.Hat jemand vieleicht Beispiele bei Projekten, wie es dort gehandhabt wird ? Oder hat jemand Ideen oder sleber Ehrfahrungen ?
Mit Beispielen kann ich nicht dienen, aber es wird nach dem üblichen Schema ablaufen: Definiere _vorher_ genau, wie der Funktionsablauf Deines Projekts im Allgemeinen sein soll; anschließend überlegst Du Dir, wo und wie die Schnittstellen gesetzt werden können. Achte darauf, daß die Schnittstellen möglichst keinerlei Sonderfälle zulassen/benötigen. Ein Modulsystem, bei dem ein Modul genau wissen muß, was ein anderes Modul macht, ist ein Fehlschlag.
Bei der ganzen Geschichte gilt es aber leider zu beachten, daß PHP nicht in der Lage ist, einzelne Dateien voneinander abzukapseln; sämtliche per include() oder require() eingebunde Dateien bilden einen großen, zusammenhängenden Block. Das Problem, das daraus ensteht, ist, daß kein Funktions- oder Variablenname im _gesamten_ System doppelt vergeben sein darf.
Bei einem integrierten System kann man das halbwegs leicht umschiffen, bei einem modularen System möchte man aber in der Regel, daß die Module wirklich vollkommen unabhängig vom Rest funktionieren: Modulschreiber A interessiert es nicht, welche Funktionen oder Variablen Modulschreiber B benutzt (auch hier gilt der Satz oben zum Thema Fehlschlag).
Aus diesem Grund solltest Du Dich tunlichst mit dem PHP-Klassensystem anfreunden, denn eine Klasse ist in PHP der einzige Ort, an dem ein funktioneller Block (sprich: das Modul) gekapselt werden kann.
Wie wird es eigendlich bei den Windows DLL Dateien gehandhabt ?
DLLs sind reine Funktionsbibliotheken, bei der jede einzelne Funktion einen ganz speziellen, vorher definierten Anwendungszweck hat. Ruft ein Programm eine dieser Funktionen auf, weiß das Programm exakt, was passiert.
Wenn ich Dich richtig verstanden habe, möchtest Du aber kompakte Blöcke, deren genaue Funktion vorher _nicht_ festgelegt wurde; es ist im Hauptprogramm lediglich eine allgemeine Position in der Verarbeitung bekannt. Aber ob dieser Block nun beispielsweise einen empfangenen Text in Kleinbuchstaben verwandelt oder ins Persische übersetzt, bestimmt der Anwender (durch die Modulauswahl), nicht der Programmierer (durch Funktionsauswahl).
Dieser Typus trifft mehr auf Geschichten wie ActiveX bzw. Plugins zu, die lediglich auf der Technik DLL basieren.
Gruß,
soenk.e