⊗ppOpNsCA 107 of 107 menu

La propria funzione per il caricamento automatico delle classi in OOP in PHP

Spesso il caricamento automatico predefinito potrebbe non soddisfarvi per qualche motivo. In tal caso è possibile scrivere il proprio caricamento automatico.

Per fare ciò, alla funzione spl_autoload_register bisogna passare come primo parametro la vostra funzione di callback scritta da voi. Questa funzione verrà chiamata quando PHP rileverà l'accesso a una classe non caricata. Il parametro di questa funzione conterrà il nome della classe con il namespace:

<?php spl_autoload_register(function($class) { // nella variabile $class ci sarà il nome della classe con il namespace }); ?>

E il compito della funzione sarà di caricare quella classe tramite require in base al nome della classe. Ciò significa che all'interno di questa funzione dobbiamo scrivere la nostra regola per il caricamento delle classi, cioè la nostra convenzione di denominazione.

Scriviamo un esempio di un nostro caricamento automatico. Supponiamo, ad esempio, che il percorso del file della classe dalla root del sito sarà lo stesso del namespace, ma mantenendo il case dei caratteri.

Ciò significa, se abbiamo una classe Core\Admin\PageController, allora il percorso ad essa dovrebbe essere Core/Admin/PageController.php.

Come potete vedere, per trasformare il nome della classe con il suo namespace basta sostituire gli slash inversi con quelli diretti, e al nome della classe aggiungere .php. Facciamolo:

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

Tuttavia, otterremo un percorso relativo al file (relativo alla root del sito). È meglio creare un percorso assoluto, in questo modo:

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

C'è un'altra sfumatura. In diversi sistemi operativi il percorso attraverso le cartelle può essere con lo slash diretto o con quello inverso. Rendiamo il nostro codice indipendente dal sistema operativo. Per fare ciò, invece dello slash diretto per separare i percorsi, utilizzeremo la costante DIRECTORY_SEPARATOR, che contiene lo slash corretto per il sistema operativo in cui è attualmente in esecuzione il nostro script. Alla fine otterremo il seguente codice:

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

Testate la funzione di caricamento automatico che ho creato.

Inventate la vostra regola di caricamento automatico e implementatela.

Italiano
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesia日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Utilizziamo i cookie per il funzionamento del sito, l'analisi e la personalizzazione. I dati vengono elaborati in conformità con la Politica sulla privacy.
accetta tutto personalizza rifiuta