Antworten auf deine Fragen:
Neues Thema erstellen

PHP spl_autoload und spl_autoload_register

afr0kalypse

Allwissendes Karmameerschweinchen!

Hi Experten :)
ich versuche mich gerade im Programmieren eines eigenen Frameworks nach MVC. Dabei bin ich jetzt bei den Themen Bootstrap und SPL unter PHP hängen geblieben.
Vor Allem die Funktionen spl_autoload und spl_autoload_register machen es mir etwas schwer.
Wenn ich es richtig verstanden habe, kann man mit spl_autoload_register quasi on the fly instanzieren, was mir ellenlange includes oder requires erspart. Aber so wie ich das aktuell mache, sehe ich nicht wirklich den Vorteil...
Hier mal mein Beispielcode, der einfach die spl_autoload_register aufruft und als Parameter ne anonyme Funktion übergibt, das Verzeichnis ROOT.L durchsucht und für jede gefundene Datei dann das include durchführt.

PHP:
spl_autoload_register(function ($className) {
    $libFiles = new DirectoryIterator(ROOT.L);
    foreach($libFiles as $file) {
     if($file->isFile()) {
         include_once $file->getPath() . DS . $file->getFilename();
     }
    }    
});

Jetzt include ich ja trotzdem selber. Also gehe ich mal davon aus, dass ich die Funktion falsch nutze.

Lange Rede, kurzer Sinn: Kann mir jemand mal erklären, wie der Aufruf richtig gemacht wird? die php.net Beispiele helfen mir da auch nicht wirklich weiter... :(
 

Duddle

Posting-Frequenz: 14µHz

AW: PHP spl_autoload und spl_autoload_register

Falls dein Englisch ausreicht, verweise ich mal auf diese Antwort auf eine vergleichbare Frage auf Stack Overflow.

Grob gesagt:

Meistens musst du irgendwo spezifizieren, wie deine Klassen genau auto-geladen werden sollen (Klassen sind verstreut/gruppiert o.ä.). Die spl_autoload_register()-Funktion kannst du dann mit eigenen autoload-Funktionen füttern, die dann bei der Klassen-Instanziierung durchgegangen werden, bis ein Treffer den notwendigen Klassen-Code geholt hat.

Für alle anderen Fälle (alles in einem Verzeichnis) ohne eigens definierte Funktionen versucht er dann automatisch per spl_autoload($klasse) die zu instanziierende Klasse im Include-Pfad zu laden.



Duddle
 

afr0kalypse

Allwissendes Karmameerschweinchen!

AW: PHP spl_autoload und spl_autoload_register

Moin Duddle,
danke für den Tipp. Langsam wirds mir glaub ich klar :uhm:
Da ich alle Klassen in einem Verzeichnis habe, muss ich nur auf das Verzeichnis zeigen, die benötigte Klasse holt sich der Autoloader (meine anonyme Funktion) dann selber. Da brauch ich nicht mehr mit Iteration arbeiten :) Das war wohl mein einziger Fehler an der stelle. Funktioniert hat es zwar trotzdem aber der eigentliche Sinn des Aufrufs wurde dadurch ja kaputt gemacht.

EDIT:
Ich hab es jetzt mal so gemacht: funktioniert auch wunderbar und ich kann gleich alle Verzeichnisse nachladen.
Jetzt ist nur die Frage, ob es gegen irgendwelche Konventionen spricht, wenn man in der selbst definierten autoLoad-Funktion spl_autoload() aufruft...

PHP:
spl_autoload_register('autoLoadL');
spl_autoload_register('autoLoadM');
spl_autoload_register('autoLoadV');
spl_autoload_register('autoLoadC');

function autoLoadL($className) {
    set_include_path(ROOT . L);
    spl_autoload($className);
}
function autoLoadM($className) {
    set_include_path(ROOT . M);
    spl_autoload($className);
}
function autoLoadV($className) {
    set_include_path(ROOT . V);
    spl_autoload($className);
}
function autoLoadC($className) {
    set_include_path(ROOT . C);
    spl_autoload($className);
}
Dank und Gruß
afr0
 
Zuletzt bearbeitet:
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben