questa è abbastanza completa ...
ha un'interfaccia, una classe astratta che implementa l'interfaccia ed una serie di sottoclassi che estendono la classe principale ... a cosa serve tutto quel codice ?

a scrivere
$users = &new UserCounter([parametri...]);
ed avere a seconda dei parametri la sottoclasse dedicata per quel tipo di database (un contatore "astratto", riallacciandomi all'altra discussione, usi sempre la classe UserCounter ma a seconda di come la inizializzi avrai il driver dedicato per gestire il contatore)

http://www.devpro.it/code/63.html




questo altro esempio invece sfrutta una classe astratta per i tipi di dato che a sua volta contiene una classe TypeHints per gestioni generiche di chiamate.
La classe astratta viene estesa da ogni tipo di dato così che ognuno avrà a disposizione gli stessi metodi ma volendo puoi inventarti altri tipi di dato, oltre le primitive.

Il dato, sarà una versione della astratta contenente la principale ... questa è un pò più contorta ma forse utile come esempio:
http://www.devpro.it/code/42.html

se vuoi altri esempi (anche non miei) specifica meglio cosa non ti è chiaro o cosa stai cercando