⊗ppOpNsCA 107 of 107 menu

Oma funktsioon klasside automaatseks laadimiseks OOP-s PHP-s

Sageli võib vaikimisi automaatne laadimine teid mingil põhjusel ei sobi. Sellisel juhul saate kirjutada oma automaatse laadimise.

Selleks tuleb funktsiooni spl_autoload_register edastada esimese parameetrina teie poolt kirjutatud callback-funktsioon. See funktsioon kutsutakse välja, kui PHP tuvastab viite laadimata klassile. Selle funktsiooni parameetrisse läheb klassi nimi koos nimeruumiga:

<?php spl_autoload_register(function($class) { // muutujas $class on klassi nimi koos nimeruumiga }); ?>

Funktsiooni kohustuseks on klassi nime põhjal laadida see klass läbi require. See tähendab, et selle funktsiooni sees peame määrama oma reegli klasside laadimiseks, st oma nimetamise kokkuleppe.

Kirjutame näite mõnest oma automaatse laadimise funktsioonist. Oletame näiteks, et me ütleme, et faili tee klassini saidi juurest on sama, mis nimeruum, kuid säilitades sümbolite registri.

See tähendab, kui meil on klass Core\Admin\PageController, siis tee selle peaks olema Core/Admin/PageController.php.

Nagu näete, klassi nime teisendamiseks koos selle nimeruumiga tuleb lihtsalt asendada tagurpidi kaldkriipsud otsekaldkriipsudega ja klassi nimele lisada .php. Teeme selle:

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

Meil saab aga faili suhteline tee (saidijuure suhtes). Parem on teha absoluutne tee, nagu nii:

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

On veel üks nüanss. Erinevates operatsioonisüsteemides võib kaustade tee olla otsekaldkriipsuga või tagurpidi kaldkriipsuga. Teeme oma koodi sõltumatuks operatsioonisüsteemist. Selleks asemel, et kasutada otsekaldkriipsu teede eraldajana, kasutame konstandit DIRECTORY_SEPARATOR, mis sisaldab õiget kaldkriipsu selle operatsioonisüsteemi jaoks, milles meie skript praegu käivitatakse. Lõpuks saame järgmise koodi:

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

Testige minu loodud automaatse laadimise funktsiooni.

Mõelge välja oma automaatse laadimise reegel ja rakendage see.

Eesti
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Me kasutame saidi toimimiseks, analüüsi ja personaliseerimiseks küpsiseid. Andmete töötlemine toimub vastavalt Privaatsuspoliitikale.
nõustu kõigega häälesta keeldu