Nell'implementazione PHP del pattern MVC le classi usate devono essere caricate automaticamente. Tradizionalmente questo compito veniva svolto dalla funzione __autoload()
, ma da PHP 5.3 in poi si possono utilizzare le analoghe funzioni del modulo SPL. In questo articolo vedremo come effettuare tale caricamento automatico utilizzando la funzione spl_autoload_register
.
Se abbiamo una struttura delle directory di questo tipo:
- assets - dataobjects - includes - index.php - modules - views
Creiamo una classe Autoloader
con tre metodi statici e salviamo il file nella directory /includes
. La struttura della classe è la seguente:
class Autoloader
{
public static function moduleAutoloader($class)
{
$path = $_SERVER['DOCUMENT_ROOT'] . "/modules/{$class}.php";
if (is_readable($path)) {
require $path;
}
}
public static function daoAutoloader($class)
{
$path = $_SERVER['DOCUMENT_ROOT'] . "/dataobjects/{$class}.php";
if (is_readable($path)) {
require $path;
}
}
public static function includesAutoloader($class)
{
$path = $_SERVER['DOCUMENT_ROOT'] . "/includes/{$class}.php";
if (is_readable($path)) {
require $path;
}
}
}
spl_autoload_register('Autoloader::includesAutoloader');
spl_autoload_register('Autoloader::daoAutoloader');
spl_autoload_register('Autoloader::moduleAutoloader');
Ovviamente i primi moduli ad essere caricati saranno quelli presenti nella directory /includes
. Quindi nel file index.php
richiamiamo la nostra classe in questo modo all'inizio del file:
<?php
require 'includes/autoloader.php';
session_start();
//... continua
?>
Ora tutte le classi verranno caricate automaticamente.