spl_autoload maakt het mogelijk het bestand van een class pas in te laden wanneer deze class wordt aangeroepen.
Neem bijvorbeeld het volgende simpele stukje code:
1 2 | <?php $userData = new Database_User_GetUserData(); |
Uiteraard moet voor het aanroepen van een class het bestand zijn ingeladen waar de class zich in bevind.
Ik heb bijvoorbeeld een class geschreven voor het omzetten van een class naam naar de locatie van het bestand.
1 2 3 4 5 6 7 8 9 10 11 12 | <?php class Autoloader { const PHP_EXTENSION = '.php'; private function fileLocation($className) { return str_replace('_', DIRECTORY_SEPARATOR, $className); } public static function autoload($className) { require_once(self::fileLocation($className).self::PHP_EXTENSION); } } |
Bij het aanroepen van de functie ‘autoload’ wordt de (private) functie fileLocation aangeroepen voor het omzetten van de class naam naar de locatie van het bestand. Omdat ik altijd een vaste opbouw gebruik voor de namen van mijn classes, komen deze functies altijd van pas. De class naam Database_User_GetUserData wordt dus door middel van deze class omgezet naar de locatie: Database/User/GetUserData.php. Maar voordat dit werkt moet nog wel de spl_autoload functie worden geregistreerd.
Dit gebeurd bij mij in de index.php door middel van het volgende stukje code:
1 2 3 | <?php require_once('Autoloader.php'); spl_autoload_register('Autoloader::autoload'); |
Dit alles maakt het dus mogelijk om bij het aanroepen van Database_User_GetUserData het bestand bij deze class in te laden.
Succes met het testen en mogelijk implementeren van deze functionaliteit!
Vragen en/of opmerkingen hoor ik graag.