⊗ppOpNsCA 107 of 107 menu

Oma luokkien automaattisen lataustoiminto OOP:lle PHP:ssä

Usein oletusarvoinen automaattinen lataus ei ehkä täytä tarpeitasi jostain syystä. Tällaisessa tilanteessa voit kirjoittaa oman automaattisen lataustoiminnon.

Tätä varten funktiolle spl_autoload_register tulee välittää ensimmäisenä parametrina kirjoittamasi takaisinkutsufunktio. Tätä funktiota kutsutaan, kun PHP havaitsee viittauksen ei-ladattuun luokkaan. Tämän funktion parametriin tulee luokan nimi nimiavaruudella:

<?php spl_autoload_register(function($class) { // muuttujassa $class on luokan nimi nimiavaruudella }); ?>

Ja funktion tehtävänä on luokan nimen perusteella suorittaa kyseisen luokan lataus require:n kautta. Toisin sanoen tämän funktion sisällä meidän on määritettävä oma sääntömme luokkien lataamiseksi, eli oma nimeyssopimuksemme.

Kirjoitetaan esimerkki jostain omasta automaattisesta lataustoiminnosta. Oletetaan esimerkiksi, että sanomme, että tiedostopolku luokkaan sivuston juuresta on sama kuin nimiavaruus, mutta symbolien kirjainkoko säilyy.

Eli, jos meillä on luokka Core\Admin\PageController, niin polku siihen pitäisi olla Core/Admin/PageController.php.

Kuten näette, luokan nimen muuntamiseksi sen nimiavaruuden kanssa tarvitsee vain vaihtaa käänteiset viivat suoriksi viivoiksi, ja luokan nimeen lisätään .php. Tehdään näin:

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

Meillä kuitenkin saadaan suhteellinen polku tiedostoon (suhteessa sivuston juureen). On parempi tehdä absoluuttinen polku, näin:

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

On vielä yksi vivahde. Eri käyttöjärjestelmissä polku kansioiden läpi voi olla joko suoralla viivalla tai käänteisellä viivalla. Tehdään koodistamme riippumaton käyttöjärjestelmästä. Korvaamme tätä varten suoran viivan polkujen erottamiseen vakiolla DIRECTORY_SEPARATOR, joka sisältää oikean viivan sen käyttöjärjestelmän mukaisesti, jossa skriptimme tällä hetkellä käynnistetään. Lopputuloksena saamme seuraavan koodin:

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

Testaa luomaani automaattisen lataustoimintoa.

Keksi oma sääntösi automaattiselle lataukselle ja toteuta se.

Suomi
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Käytämme evästeitä verkkosivuston toiminnalle, analytiikalle ja personoinnille. Tietojen käsittely tapahtuu Tietosuojakäytännön mukaisesti.
hyväksy kaikki mukauta hylkää