E' buona pratica nella programmazione orientata agli oggetti, avere un file per la dichiarazione di ogni classe, ognuno nominato con lo stesso
identico case usato per il nome della classe.
Questo ci consente di trovare immediatamente il codice di una classe, e di apportarvi modifiche immediatamente disponibili in tutti i sorgenti
che utilizzano tale classe, facendoci risparmiare molto tempo durante la manutenzione del codice.
Questo metodo ci consentirà anche di farci risparmiare molte righe di codice perchè ci da la possibilità di includere esclusivamente le classi
che realmente sono necessarie per la corretta esecuzione dello script.
In applicazioni reali però, diventa problematico inserire in ogni file dello script decine e decine di righe di inclusioni di file esterni, e a
questo proposito PHP ci mette a disposizione la funzione Magica __autoload().
Esempio con __autoload()
ClasseUno.php
<?php
class ClasseUno
{
public $attributo = "Attributo di Classe Uno";
}
?>
ClasseDue.php
<?php
class ClasseDue
{
public $attributo = "Attributo di Classe Due";
}
?>
test.php
<?php
function __autoload($classe)
{
require_once("$classe.php");
}
$obj = new ClasseUno();
echo $obj->attributo . "<br />\n";
$obj = new ClasseDue();
echo $obj->attributo;
?>
|
| L'output prodotto è il seguente :
Attributo di Classe Uno
Attributo di Classe Due |
Come potete notare dalla pagina test.php, non ho esplicitamente incluso i file esterni ClasseUno.php e ClasseDue.php, ma
ci ha pensato la funzione __autoload() richiamata automaticamente da PHP che non ha trovato subito le dichiarazioni delle classi.
Nota : fate attenzione a non specificare più di una funzione __autoload() per script o riceverete un errore fatale.
Fatal error : Cannot redeclare __autoload() (previously declared in C:\AppServ\www\test\test.php:3)
Inoltre i nomi delle classi in PHP sono case-insensitive, mentre __autoload() li gestisce come sensitive,
perciò prestate molta attenzione a quando nominate i file, che come dicevo all'inizio è buona norma che siano identici al nome della classe.