⊗ppOpNsCA 107 of 107 menu

Egen funktion för automatisk laddning av klasser i OOP i PHP

Ofta kan standard automatisk laddning inte passa dig av någon anledning. I så fall kan du skriva din egen automatiska laddning.

För detta måste du skicka din skrivna callback-funktion som första parameter till funktionen spl_autoload_register. Denna funktion kommer att anropas när PHP upptäcker en åtkomst till en oladdad klass. Namnet på klassen med namnområde kommer att skickas till denna funktions parameter:

<?php spl_autoload_register(function($class) { // variabeln $class kommer att innehålla klassnamnet med namnområde }); ?>

Och funktionens uppgift är att ladda klassen via require baserat på klassnamnet. Det betyder att vi inuti denna funktion måste skriva vår egen regel för att ladda klasser, det vill säga vår egen namngivningskonvention.

Låt oss skriva ett exempel på en egen automatisk laddning. Låt oss till exempel säga, att sökvägen till klassfilen från webbplatsens rot kommer att vara densamma som namnområdet, men med bevarande av teckenens register.

Det betyder att om vi har en klass Core\Admin\PageController, ska sökvägen till den vara Core/Admin/PageController.php.

Som du ser, för att omvandla klassnamnet med dess namnområde behöver du bara byta omvända snedstreck mot raka snedstreck, och till klassnamnet lägga till .php. Låt oss göra detta:

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

Vi kommer dock att få en relativ sökväg till filen (relativt webbplatsens rot). Det är bättre att göra en absolut sökväg, så här:

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

Det finns ytterligare en nyans. I olika operativsystem kan sökvägen genom mappar vara med rakt snedstreck eller med omvänt snedstreck. Låt oss göra vår kod oberoende av operativsystemet. För att göra detta, istället för ett rakt snedstreck för att separera sökvägar, kommer vi att använda konstanten DIRECTORY_SEPARATOR, som innehåller rätt snedstreck för det operativsystem i vilket vårt skript för närvarande körs. Som ett resultat får vi följande kod:

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

Testa den automatiska laddningsfunktion jag skapat.

Kom på din egen regel för automatisk laddning och implementera den.

Svenska
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi använder kakor för webbplatsens funktion, analys och personalisering. Behandling av data sker i enlighet med Integritetspolicyn.
acceptera alla anpassa avvisa