⊗ppOpNsCA 107 of 107 menu

Egen funksjon for automatisk lasting av klasser i OOP i PHP

Ofte kan standard automatisk innlasting ikke passe deg av en eller annen grunn. I slike tilfeller kan du skrive din egen automatiske innlastingsfunksjon.

For å gjøre dette må du sende din egen callback-funksjon som første parameter til funksjonen spl_autoload_register. Denne funksjonen vil bli kalt opp når PHP oppdager tilgang til en ulastet klasse. Navnet på klassen med navnerom vil bli sendt som parameter til denne funksjonen:

<?php spl_autoload_register(function($class) { // i variabelen $class vil navnet på klassen med navnerom være }); ?>

Og funksjonens oppgave er å laste inn denne klassen via require basert på klassens navn. Det vil si at inni denne funksjonen må vi skrive vår egen regel for lasting av klasser, det vil si vår egen navnekonvensjon.

La oss skrive et eksempel på vår egen automatiske innlastingsfunksjon. La oss for eksempel si at vi bestemmer at banen til klassens fil fra nettstedets rot skal være den samme som navnerommet, men med store og små bokstaver beholdt.

Det vil si, hvis vi har klassen Core\Admin\PageController, så skal banen til den være Core/Admin/PageController.php.

Som du ser, for å transformere klassens navn med dens navnerom, trenger du bare å bytte omvendte skråstreker med vanlige skråstreker, og til klassens navn legge til .php. La oss gjøre dette:

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

Imidlertid vil vi få en relativ bane til filen (i forhold til nettstedets rot). Det er bedre å lage en absolutt bane, slik:

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

Det er også en nyanse. I forskjellige operativsystemer kan banen gjennom mapper ha vanlig skråstrek eller omvendt skråstrek. La oss gjøre koden vår uavhengig av operativsystem. For å gjøre dette, i stedet for vanlig skråstrek for å skille baner, bruker vi konstanten DIRECTORY_SEPARATOR, som inneholder riktig skråstrek for det operativsystemet som skriptet vårt kjører på for øyeblikket. Til slutt får vi følgende kode:

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

Test den automatiske innlastingsfunksjonen jeg har laget.

Kom på din egen regel for automatisk innlasting og implementer den.

Norsk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi bruker informasjonskapsler for nettstedets funksjonalitet, analyse og personalisering. Behandling av data foregår i henhold til Personvernerklæringen.
godta alle tilpass avvis