⊗ppOpNsCA 107 of 107 menu

Sopstvena funkcija za automatsko učitavanje klasa u OOP u PHP-u

Često vas podrazumevano automatsko učitavanje može ne zadovoljavati iz nekih razloga. U takvom slučaju možete napisati sopstveno automatsko učitavanje.

Za ovo u funkciju spl_autoload_register treba da prosledite vašu funkciju-povratni poziv kao prvi parametar. Ova funkcija će biti pozvana kada PHP detektuje pristup neuočenoj klasi. U parametar ove funkcije će stići ime klase sa prostorom imena:

<?php spl_autoload_register(function($class) { // u promenljivoj $class će biti ime klase sa prostorom imena }); ?>

A obavezom funkcije će biti da po imenu klase izvrši učitavanje te klase putem require. To jest unutar ove funkcije treba da napišemo svoje pravilo za učitavanje klasa, odnosno svoju konvenciju imenovanja.

Hajde da napišemo primer neke sopstvene automatske učitavanja. Neka, na primer, kažemo da će putanja do fajla klase od korena sajta biti ista kao i prostor imena, ali sa očuvanjem veličine slova.

To jest, ako imamo klasu Core\Admin\PageController, onda putanja do nje treba da bude Core/Admin/PageController.php.

Kao što vidite, za transformaciju imena klase sa njenim prostorom imena treba samo da zamenite obrnute kose crte pravim, a imenu klase dodate .php. Učinimo ovo:

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

Međutim, dobićemo relativnu putanju do fajla (relativno u odnosu na koren sajta). Bolje je napraviti apsolutnu putanju, ovako:

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

Postoji još jedan nijans. U različitim operativnim sistemima putanja po fasciklama može biti sa kosom crtom ili obrnutom kosom crtom. Učinimo naš kod nezavisnim od operativnog sistema. Za ovo umesto kose crte za razdvajanje putanja stavljamo konstantu DIRECTORY_SEPARATOR, koja sadrži odgovarajući separator za operativni sistem u koji se trenutno pokreće naš skript. Na kraju dobijamo sledeći kod:

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

Testirajte sopstvenu funkciju automatskog učitavanja koju sam napravio.

Osmislite sopstveno pravilo automatskog učitavanja i implementirajte ga.

Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij