⊗ppOpNsCA 107 of 107 menu

Savo funkcija klasių automatiniam įkėlimui OOP PHP

Dažnai numatytasis automatinis įkėlimas gali jūsų netenkinti dėl įvairių priežasčių. Tokiu atveju galite parašyti savo automatinio įkėlimo funkciją.

Norint tai padaryti, į funkciją spl_autoload_register pirmuoju parametru reikia perduoti jūsų parašytą atgalinio kvietimo funkciją. Ši funkcija bus iškviečiama, kai PHP aptiks kreipimąsi į neįkeltą klasę. Į šios funkcijos parametrą bus paduodamas klasės pavadinimas su vardų erdve:

<?php spl_autoload_register(function($class) { // kintamajame $class bus klasės pavadinimas su vardų erdve }); ?>

O funkcijos pareiga bus pagal klasės pavadinimą atlikti šios klasės įkėlimą naudojant require. Tai yra, šios funkcijos viduje mes turime nurodyti savą taisyklę klasių įkėlimui, tai yra savą pavadinimų susitarimą.

Parašykime kokios nors savos automatinio įkėlimo funkcijos pavyzdį. Tarkime, pavyzdžiui, kad mes sakome, kad kelias iki klasės failo nuo svetainės šaknies bus toks pats kaip ir vardų erdvė, bet išlaant simbolių registrą.

Tai yra, jei mes turime klasę Core\Admin\PageController, tai kelias iki jos turi būti Core/Admin/PageController.php.

Kaip matote, norint paversti klasės pavadinimą su jos vardų erdve reikia tiesiog pakeisti atvirkščius pasviruosius brūkšnius į įprastus, o prie klasės pavadinimo pridėti .php. Padarykime tai:

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

Tačiau mes gausime santykinį kelią iki failo (nuo svetainės šaknies). Geriau padaryti absoliutų kelią, štai taip:

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

Yra dar vienas niuansas. Skirtingose operacinėse sistemose kelias per aplankus gali būti su įprastu pasviruoju brūkšniu arba su atvirkščiu. Padarykime mūsų kodą nepriklausomą nuo operacinės sistemos. Norėdami tai padaryti, vietoj įprasto pasvirojo brūkšnio kelių atskyrimui naudosime konstantą DIRECTORY_SEPARATOR, kuriame yra teisingas tos operacinės sistemos pasvirasis brūkšnys, kurioje šiuo metu paleidžiamas mūsų scenarijus. Galų gale gausime tokį kodą:

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

Ištestuokite sukurtą automatinio įkėlimo funkciją.

Sugalvokite savo automatinio įkėlimo taisyklę ir ją implementuokite.

Lietuvių
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mes naudojame slapukus svetainės veikimui, analizei ir personalizavimui. Duomenų apdorojimas vyksta pagal Privatumo politiką.
priimti visus nustatyti atšaukti