⊗ppOpNsCA 107 of 107 menu

Eigene Funktion für das automatische Laden von Klassen in OOP in PHP

Oft kann das Standard-Autoloading Sie aus irgendeinem Grund nicht zufriedenstellen. In In diesem Fall können Sie Ihr eigenes Autoloading schreiben.

Dazu muss der Funktion spl_autoload_register als ersten Parameter Ihren geschriebenen Callback-Funktion übergeben werden. Diese Funktion wird aufgerufen, wenn PHP den Zugriff auf eine nicht geladene Klasse erkennt. Als Parameter dieser Funktion wird der Klassenname mit Namensraum übergeben:

<?php spl_autoload_register(function($class) { // in der Variable $class befindet sich der Klassenname mit Namensraum }); ?>

Die Aufgabe der Funktion ist es, basierend auf dem Klassennamen das Laden dieser Klasse via require durchzuführen. Das heißt, innerhalb dieser Funktion müssen wir unsere eigene Regel für das Laden von Klassen festlegen, also unsere eigene Namenskonvention.

Schreiben wir ein Beispiel für ein eigenes Autoloading. Nehmen wir zum Beispiel an, wir legen fest, dass der Pfad zur Klassendatei vom Root-Verzeichnis der Website genauso sein soll wie der Namensraum, aber unter Beibehaltung der Groß-/Kleinschreibung.

Das heißt, wenn wir eine Klasse Core\Admin\PageController haben, dann sollte der Pfad zu ihr Core/Admin/PageController.php sein.

Wie Sie sehen, muss für die Transformation des Klassennamens mit seinem Namensraum einfach der Backslash durch einen Forward Slash ersetzt werden, und an den Klassennamen muss .php angehängt werden. Machen wir das:

<?php spl_autoload_register(function($class) { $filename = str_replace('\\', '/', $class) . '.php'; require($filename); }); ?>

Allerdings erhalten wir so einen relativen Pfad zur Datei (relativ zum Root-Verzeichnis der Website). Besser ist es, einen absoluten Pfad zu erstellen, so:

<?php spl_autoload_register(function($class) { $root = $_SERVER['DOCUMENT_ROOT']; $filename = $root . '/' . str_replace('\\', '/', $class) . '.php'; require($filename); }); ?>

Es gibt noch einen weiteren Punkt. In verschiedenen Betriebssystemen kann der Pfad durch die Ordner mit einem Forward Slash oder einem Backslash getrennt sein. Machen wir unseren Code unabhängig vom Betriebssystem. Dazu ersetzen wir den Forward Slash für die Pfadtrennung durch die Konstante DIRECTORY_SEPARATOR, die den korrekten Slash für das Betriebssystem enthält, in dem unser Skript gerade läuft. Am Ende erhalten wir folgenden Code:

<?php spl_autoload_register(function($class) { $root = $_SERVER['DOCUMENT_ROOT']; $ds = DIRECTORY_SEPARATOR; $filename = $root . $ds . str_replace('\\', $ds, $class) . '.php'; require($filename); }); ?>

Testen Sie die von mir erstellte Autoload-Funktion.

Denken Sie sich Ihre eigene Autoload-Regel aus und setzen Sie sie um.

Deutsch
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wir verwenden Cookies für den Betrieb der Website, Analyse und Personalisierung. Die Datenverarbeitung erfolgt gemäß der Datenschutzerklärung.
alle akzeptieren anpassen ablehnen