Corsi on-line

PHP: autoload delle classi come alternativa all’inclusione manuale

Notoriamente in PHP l’istanza di una classe deve precedere il suo utilizzo, a questo scopo abbiamo la possibilità di utilizzare i classici costrutti basasti su include(), require() e *_once(); tale modalità ci costringe però a definire da subito tutte le classi che desideriamo adottare all’interno di un’applicazione; in alternativa è però possibile sfruttare il supporto per l’autoload del linguaggio, esso consentirà di effettuare delle chiamate ogniqualvolta uno script cercasse di istanziare l’oggetto di una classe che non sia stata caricata.

PHPAnalizziamo quindi un semplice esempio di autoload basato sull’istanza di due classi differenti:

<?php
function __autoload($nome_classe) {
    $nome_file = $nome_classe . ".php";
    if(file_exists( $nome_file ))
    {
        include_once($nome_file);
    }
}
$prima_classe = new pippoClass();
$seconda_classe = new plutoClass();
?>

In pratica la nostra funzione per l’autoload non fa altro che controllare l’esistenza di uno o più file tramite costrutto condizionale; dato che per convenzione i file prendono i nomi delle classi che contengono, questi potranno essere inclusi permettendo l’istanza delle classi.
Nel caso in cui tutti i file di classe siano presenti in un’unica directory, è possibile adottare un’altra metodologia basata sulla funzione glob().

foreach (glob('nome_directory/*.php') as $nome_file)
{
    include_once $nome_file;
}
$prima_classe = new pippoClass();
$seconda_classe = new plutoClass();
$terza_classe = new altraClass();

glob() è infatti una funzione nativa di PHP che restituisce un array composto da nomi di file e directory prodotto dal confronto con un pattern specifico, nel nostro caso la corrispondenza è stata ricercata sulla base dello schema “*.php” che in pratica indica “tutti i file ‘.php’ presenti in ‘nome_directory'”.

L’inclusione dinamica di file sulla base di variabili non è un’operazione esente da rischi, per cui, prima di effettuarla, sarà necessario predisporre gli opportuni controlli per evitare la chiamata a script indesiderati.

Post correlati
I più letti del mese
Tematiche