Estendere PDO e PDOStatement di PHP 5

2008-09-14 | Tags: , ,

PDO sta per PHP Data Objects ed è un nuovo sistema per interfacciarsi a database con PHP 5. Grazie a driver specifici per ogni tipo di database, PDO è in grado di offrire funzionalità ed interfacce standard a prescindere dal tipo del database con cui si interagisce.

Il sistema PHP Data Objects si compone di due classi, una per interfacciarsi al database e per interrogarlo (PDO), un’altra per accedere al record set restituito dalla query (PDOStatement).

L’utilità della programmazione ad oggetti è che è possibile estendere una classe in qualsiasi momento, rendendola più adatta alle nostre esigenze.

Immaginiamo ad esempio di utilizzare esclusivamente database MySQL. Normalmente una connessione di tipo MySQL con PDO si fa in questo modo:

Una connessione di questo tipo è standard; ma con PDO è possibile configurare, ad esempio, come gestire gli errori che si dovessero verificare in fase di connessione o inquiry col database.

Una buona norma potrebbe essere quella di estendere la classe PDO con una nostra che esegue una serie di operazioni, come ad esempio la seguente:

Questa classe, oltre a gestire la connessione al database, configura il driver in modo da visualizzare gli errori generati dal database come eccezioni, quindi intercettabili con la classe PDOException utilizzabile col costrutto Try/Catch.

La connessione, con la nuova classe, avverrà nel seguente modo:

Ovviamente, ogni software ha diverse esigenze, quindi è facile modificare il costrutto aggiungendo tutte le funzionalità che vogliamo.

Altrettanto utile può essere estendere la classe PDOStatement. Un caso potrebbe essere quello che ho dovuto affrontare io stesso, quando ho fatto il passaggio a queste nuove classi di funzioni. Stranamente, tra tutte le interfacce utili al parsing del record set, manca quella capace di restituire un unico risultato.

Ad esempio, quando si lancia una query del tipo SELECT COUNT(*), questa restituisce un record set di una sola riga e colonna. Sarebbe quindi utile poter accedere direttamente a tale dato, senza fare un parsing inutile del record set come se fosse multi dimensionale.

In condizioni normali, con PDO, per accedere al record set ipotizzato prima, bisogna fare così:

Ma il tutto si può rendere più snello estendendo la classe PDOStatement nel seguente modo:

Questa classe aggiunge una nuova interfaccia all’oggetto PDOStatement, che permette di recuperare il risultato di un record set formato da una sola riga e colonna.

L’esempio precedentemente descritto, lo possiamo quindi riscrivere nel seguente modo:

Chi è più attento si sarà chiesto come fa PDO a sapere che deve utilizzare la nostra classe myPDOStatement piuttosto che la PDOStatement standard. In effetti, in qualche modo bisogna dirlo al driver PDO?

Per farlo non dobbiamo far altro che aggiungere una riga di codice al costrutto della classe db che abbiamo precedemente descritto:

Da questi piccoli esempio è possibile vedere quanto potente è il nuovo PDO e quanto sia diventato cruciale lo sviluppo con le . Ricordando che non è un modus operandi, ma una forma mentis.

  1. 1 trackbacks
    1. 2008-09-14 - diggita.it