⊗ppOpNsCA 107 of 107 menu

Lastna funkcija za samodejno nalaganje razredov v OOP v PHP

Pogosto vas privzeto samodejno nalaganje ne ustreza iz kakšnih koli razlogov. V takem primeru lahko napišete lastno avtomatsko nalaganje.

Za to morate v funkcijo spl_autoload_register kot prvi parameter posredovati vašo napisano funkcijo-povratni klic. Ta funkcija se bo klicala, ko bo PHP zaznal dostop do nenaloženega razreda. V parameter te funkcije bo prišlo ime razreda z imenskim prostorom:

<?php spl_autoload_register(function($class) { // v spremenljivki $class bo ime razreda z imenskim prostorom }); ?>

Naloga funkcije pa je, da po imenu razreda izvede nalaganje tega razreda prek require. To pomeni, da moramo znotraj te funkcije določiti lastno pravilo za nalaganje razredov, torej lastno dogovor o poimenovanju.

Napišimo primer kakšne lastne samodejne nalaganje. Recimo, da trdimo, da naj bo pot do datoteke razreda od korena spletnega mesta enaka kot imenski prostor, vendar z ohranjanjem velikosti črk.

To pomeni, če imamo razred Core\Admin\PageController, mora biti pot do njega Core/Admin/PageController.php.

Kot lahko vidite, je za pretvorbo imena razreda z njegovim imenskim prostorom treba samo zamenjati obratne poševnice s prečnimi, in k imenu razreda dodati .php. Naredimo to:

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

Vendar bomo dobili relativno pot do datoteke (glede na koren spletnega mesta). Bolje je narediti absolutno pot, takole:

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

Obstaja še en odtenek. V različnih operacijskih sistemih je lahko pot po mapah s prečno poševnico ali z obratno. Naredimo našo kodo neodvisno od operacijskega sistema. Za to bomo namesto prečne poševnice za ločevanje poti uporabili konstanto DIRECTORY_SEPARATOR, ki vsebuje pravo poševnico tistega operacijskega sistema, v katerem se trenutno zažene naš skript. Na koncu dobimo naslednjo kodo:

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

Preizkusite funkcijo za samodejno nalaganje, ki sem jo ustvaril.

Spojmite lastno pravilo za samodejno nalaganje in ga implementirajte.

Slovenščina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Za delovanje spletnega mesta, analitiko in personalizacijo uporabljamo piškotke. Obdelava podatkov poteka v skladu s Politiko zasebnosti.
sprejmi vse nastavi zavrni