UserModel
Codice php:
abstract class UserModel{
protected $db= null;
protected $data= null;
public function __construct(PDO $db){
$this->db= $db;
}
abstract protected function setData();
}
Il costruttore ha come unico parametro una istanza della classe PDO (aggregation) ed ha al suo interno un metodo dichiarato astratto per forzare le classi figlie ad implementarlo.
Nel file user-settings.php avremo un'unica istanza della classe PDO da utilizzare per tutto lo script:
Codice php: $db= new PDO(CONN_STRING, DB_USER, DB_PASSWORD); $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
Da notare l'utilizzo del metodo setAttribute per la gestione degli errori.
Il metodo setData ha il compito di istanziare tutte quelle classi necessiarie al modulo (composition),
Codice php:
protected function setData(){
$this->data= new UserData(/* parametri */);
$this->validator= new UserValidator($this->data);
$this->mail= new UserMail($this->data);
}
da notare che la visibilità del metodo deve essere uguale o più debole (in questo caso public) rispetto a quello astatto.
A seconda delle necessità il modello implementerà un metodo o più metodi specifici per il suo compito, ma questo sarà discusso nei prossimi aricoli.
Conclusioni
PDO e' un' estensione in grado di pilotare database di diverso tipo tramite un' unica interfaccia ( o meglio classe ) che con gli stessi metodi opera su mysql, mysql 4.x, sqlite 2.x, sqlite 3.x , PostgreSQL, sqlserver, oracle e chi piu' ne ha piu' ne metta. Segnalo PDO dalla A alla Z a quei lettori che vogliono approfondire la conoscenza di questa utilissima classe.
Nel prossimo articolo parlerò del Controller.