Dopo aver scritto una serie di classi inutili vediamo come ci possiamo semplificare la vita
Ma prima un paio di considerazioni sulla classe di autoloading
Codice PHP:
$loader = new SplClassLoader( [namespace], [root/directory] );
$loader->register();
il costruttore della classe necessità di due parametri per funzionare
- il namespace di riferimento
- la directory di base per la ricerca dei files e il successivo autoload
esistono altri metodi per impostare alcuni parametri opzionali ma vi invito a leggere la definizione della classe per saperne di più.
Passiamo all'esempio
[root]/index.php
Codice PHP:
namespace MyProject;
use PDO;
use test\loader\SplClassLoader;
require_once( 'test/loader/SplClassLoader.php' );
// 'test' è il namespace che vogliamo utilizzare sarà poi la classe a ricercare nei vari sub-namespace le classi
// __DIR__ in questo caso ci dà la directory [root]
$loader = new SplClassLoader( 'test', __DIR__ );
$loader->register();
use test\commmon\a;
use test\widget\html\p;
define( "DB_DNS", 'mysql:host=you.host.net;dbname=dbname' );
define( "DB_USER", 'dbuser' );
define( "DB_PASS", 'dbpass' );
try {
$pdo = new PDO( DB_DNS, DB_USER, DB_PASS );
$a = new a( $pdo );
$p = new p( $a->dump() );
echo $p->render();
} catch ( Exception $e ) {
echo '<p>' . $e->getMessage() . '</p>';
echo '<p>File: ' . $e->getFile() . ' - line: ' . $e->getLine() . '</p>';
exit;
}
Al di là di eventuali errori che possono uscire, il codice non l'ho ancora testato, è importante notare come non ci sia più il bisogno di scrivere una fila di include per caricare le classi necessarie alla nostra applicazione.
Questa classe standard supporta sia i sistemi normali che i sistemi con namespace, è universale e standard. Esistono anche il PSR-1 e PSR-2 ma non sono ancora ufficiali, devo indagare