Buona sera ragazzi,

piccolo regalino di pasqua

In questo topic vi parlo di autoloading.

L'autoloading è quel processo che ci permette di caricare una classe ed il relativo file senza bisogno di usare funzioni di include o require

Partiamo dalla base, supponiamo di avere una classe user che dobbiamo istanziare e utilizzare
Generalmente:
Codice PHP:
require_once( 'user.php' );
$user = new user(); 
E' buona norma scrivere la definizione della classe su file singolo per una migliore organizzazione del lavoro. Questo ci forzava a dover includere ogni file per ogni classe che dovevamo usare.

La prima funzione che ci è venuta in aiuto dall'avvento di PHP 5 fu la magic function chiamata __autoload() . Questa funzione forniva un'ultima possibilità di caricare la definizione della classe in runtime prima di generare un errore.

una semplicissima implementazione di questo metodo:
Codice PHP:
function __autoload$className ) {
    
$filename $className ".php";
    if ( 
is_readable$filename ) ) {
        require 
$filename;
    }

l'unica considerazione da fare qui è che è molto meglio usare la funzione is_readable() piuttosto che file_exists(). Un file potrebbe esistere ma non avere i permessi per essere letto, is_readable() effettua tutti e due i controlli.

Questa soluzione però era limitativa in quanto si poteva definire una sola funzione di autoload.

Fu cosi che da PHP 5.1.2 è stato introdotto spl_autoload() e le relative funzioni.

spl_autoload() permette di registrare N funzioni di autoload tramite la funzione spl_autoload_register()

Esempio:
Codice PHP:
function autoloadModels$className ) {
    
$filename "models/" $className ".php";
    if ( 
is_readable$filename ) ) {
        require 
$filename;
    }
}

function 
autoloadControllers$className ) {
    
$filename "controllers/" $className ".php";
    if ( 
is_readable$filename ) ) {
        require 
$filename;
    }
}

spl_autoload_register'autoloadModels' );
spl_autoload_register'autoloadControllers' ); 
Ovviamente questi semplici esempi sono solamente una dimostrazione di come l'autoloading funzionava nelle versioni precedenti di PHP.

Attualmente con l'avvento dei NAMESPACE le cose sono leggermente cambiate e ci sono degli standard che hanno preso piede.
Il primo e l'oggetto del topic è lo standard PSR-0.

Nel prossimo post vediamo cos'è e come si usa.
Intanto buona lettura.