Ruudsy schrieb:
Das ist so eine Sache mit mir und diesen FW, ... ich habe mich schon versucht in zwei einzuarbeiten, vor langer Zeit war es einmal Zend und vor wenigen Monaten CakePHP.
Dann wäre doch jetzt nochmal die Gelegenheit sich Symfony mal anzuschauen, was wie ich finde professioneller aufgezogen ist als CakePHP.
Ich habe für mich entschieden, dass das was ih möchte damit sicherlich zu realisieren ist, aber ein gutes Stück an Einarbeitung nach sich zieht.
Bei kleineren Projekten ist der Einarbeitungsaufwand in der Tat überproportional groß, bei größeren Projekten jedoch ist eine ordentliche Struktur sehr wichtig und gerade dort nimmt ein gutes Framework einem ein großes Stück Arbeit ab. Daher solltest du nochmal über den Einsatz eines Frameworks nachdenken.
Wenn jemand noch Ideen hat, dann immer her damit 😉
Zurück zur Ursprungsfrage: Wie kann man die PHP-Klassen am besten organisieren?
Den wichtigsten Schritt hast du ja schon getan, nämlich den Autoloader zu verwenden. Ich würde nun den eigenen Autoloader erweitern und sehe dafür verschiedene Herangehensweisen:
Die verschiedenen Klassen(dateien) solltest du - wie selbst schon angedacht - in Ordner zusammenfassen. Nach welcher Logik und wie verschachtelt, bleibt deinem Geschmack überlassen 😉
Jetzt muss der Autoloader nur noch wissen, wo er die Klassen findet. Das könntest du z.B. dadurch erreichen, dass du den Pfad im Klassennamen codierst, Bsp: Klasse Database_Mysql_Connection
findet sich in Database/Mysql/Connection.php
Ein anderer Ansatz wäre eine Art Index zu verwalten, z.B. in einem Array:
| class myAutoloader {
protected $paths = array(
'Mysql_Conection' => 'Database/Mysql/Connection.php',
...
);
...
}
|
Damit hast du dann natürlich einen zusätzlichen Verwaltungsaufwand für den Index.
Weiterer Ansatz wäre eine Mischform, nämlich den Autoloader (einmalig) alle Ordner (rekursiv) durchsuchen zu lassen und damit selbst den Index generieren zu lassen. Du benötigst dann natürlich ein zuverlässiges Mapping von Klassenname zu Dateiname für die Indexgenerierung, kannst aber auch gezielte Ausnahmen hinzufügen.
Beste Grüße
Froggy