PHP: autoload delle classi nel pattern MVC

PHP: autoload delle classi nel pattern MVC

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.

Torna su