⊗ppOpNsCA 107 of 107 menu

Funksioni i personal për autoloading e klasave në OOP në PHP

Shpesh autoloading-i parazgjedhur mund të mos ju përshtatet për arsye të caktuara. Në raste të tilla mund të shkruani autoloading-in tuaj.

Për këtë, në funksionin spl_autoload_register duhet të kaloni si parametër të parë funksionin-callback të shkruar nga ju. Ky funksion do të thirret kur PHP do të zbulojë akses në një klasë të pa-ngarkuar. Në këtë funksion do të kalojë emri i klasës me hapësirën e emrave:

<?php spl_autoload_register(function($class) { // në variablin $class do të jetë emri i klasës me hapësirën e emrave }); ?>

Dhe detyra e funksionit është që nga emri i klasës të kryejë ngarkimin e kësaj klase përmes require. Kjo do të thotë brenda këtij funksioni ne duhet të shkruajmë rregullin tonë për ngarkimin e klasave, pra marrëveshjen tonë të emërtimit.

Le të shkruajmë një shembull të ndonjë autoloading-u të personal. Le të themi, për shembull, ne deklarojmë që rruga drejt skedarit të klasës nga rrënja e sajtit do të jetë e njëjtë si hapësira e emrave, por me ruajtjen të regjistrit të simboleve.

Kjo do të thotë, nëse kemi klasën Core\Admin\PageController, atëherë rruga drejt saj duhet të jetë Core/Admin/PageController.php.

Siç e shihni, për transformimin e emrit të klasës me hapësirën e saj të emrave duhet thjesht të ndryshoni backslash-et në slash-a të drejtë, dhe te emri i klasës të shtoni .php. Le ta bëjmë këtë:

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

Ne, megjithatë, do të kemi rrugë relative drejt skedarit (relative nga rrënja e sajtit). Më mirë të bëhet rrugë absolute, ja kështu:

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

Ka edhe një nuancë. Në sisteme të ndryshme operative rruga përmes dosjeve mund të jetë me slash të drejtë ose me backslash. Le ta bëjmë kodin tonë të pavarur nga sistemi operativ. Për këtë, në vend të slash-it të drejtë për ndarjen e rrugëve do të vendosim konstanten DIRECTORY_SEPARATOR, që përmban slash-in e duhur të atij sistemi operativ, në të cilin aktualisht po xhirohet skripti ynë. Si përfundim do të kemi kodin e mëposhtëm:

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

Testoni funksionin e krijuar nga unë për autoloading.

Shpikni rregullin tuaj për autoloading dhe implementojeni atë.

Shqip
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ne përdorim cookie për funksionimin e sajtit, analizën dhe personalizimin. Përpunimi i të dhënave bëhet në përputhje me Politikën e Privatësisë.
prano të gjitha konfiguro refuzo