Sven Rautenberg: spl_autoload_register

Beitrag lesen

Moin!

Hi Sven,

Außerdem sei dir an dieser Stelle wärmstens ans Herz gelegt, dich mal über "Composer" zu informieren.

Ich hab es jetzt installiert bekommen und ein Projekt erstellt. Jetzt habe ich hier die folgenden Verzeichnisse:

/index.php
/vendor/
/vendor/composer/
/vendor/monolog/

/scr/class/ # <-- hier hatte ich eigentlich vor, meine Klassen abzulegen

Bis hierhin schon prima. Wie man der Doku zu Composer entnehmen kann, musst du irgendwo, idealerweise am Anfang eines Skripts, die Datei vendor/autoload.php einbinden (ich würde es mit require machen - die wird gebraucht, sonst geht nix). Danach kannst du alle Klassen der eingebundenen Pakete sowie ggf. auch deren Funktionen direkt benutzen.

Dein eigener Code darf in jedem anderen Verzeichnis liegen, dass du magst. "src" bietet sich irgendwie an. Die Lage deiner "index.php" ist allerdings suboptimal, weil sie nahelegt, dass das die allgemeine Einstiegsdatei für die Website ist - und wenn das so ist, kann man allen Code und alle Konfigurationsdateien (mit Passworten?) dieser Website direkt mit dem Browser aufrufen, wenn man den Dateinamen kennt (oder ihn aus Fehlermeldungen gesagt bekommt, oder suchen darf).

Deshalb: "public/index.php" draus machen - das Verzeichnis "public" (es darf auch anders heißen) ist dein DOCUMENT_ROOT - muss im HTTP-Server auch so konfiguriert werden. Dann ändert sich logischerweise der Pfad für das Autoloading: require "../vendor/autoload.php".

Composer bietet dir auch an, das Autoloading für deinen eigenen Code mit zu übernehmen. Ich empfehle dir, für Klassen unbedingt PSR-4 zu verwenden. Zum einen benutzen es alle anderen Pakete ebenfalls, und es kommt ein Gefühl der einheitlichen Codeorganisation auf. Zum anderen funktioniert PSR-4 automatisch sofort, wenn man eine neue Klasse in einer neuen Datei hinzufügt. Nur wenn du keine Namespaces benutzt, musst du PSR-0 nehmen (und bis vermutlich zu längeren Pfaden für die Klassen gezwungen).

Ich hatte irgendwo gesehen, dass ein Ordner „classes“ in Vendor war. Gehört er da rein? Ich hab den Nutzen für mich selbst noch nicht ganz erfassen können, sieht aber sehr Interessant aus.

Es gibt Dateien unter "vendor/composer", die sich mit den Details des Autoloadings befassen. Die kannst du interessehalber anschauen, aber sie werden automatisch generiert und sind deshalb nicht zu bearbeiten.

Darüber hinaus kann jedes beliebige Paket seine Verzeichnisstruktur frei wählen, also auch "classes" nennen. Der wichtigste Vorteil von Composer ist ja, dass man durch Autoloading, das von jedem Paket definiert wird, nicht mehr wissen muss, wo genau sich eine DATEI befindet. Man muss nur wissen, welche KLASSE man benutzen will. Genau so, wie URLs von Dateien auf dem Webserver unabhängig werden, werden verwendete Klassen von ihren Dateien unabhängig.

Grüße Sven