Le ultime lezioni della guida sono dedicate alla descrizione pratica di programmazione di una piccola applicazione Web. Per rappresentare un'applicazione reale ho scelto uno dei compiti server-side più comuni che è possibile realizzare con PHP: la validazione di un form. Questa task può essere rappresentata in mille modalità differenti (sono molte le librerie open source che permettono la validazione di un form tramite PHP), ma solo analizzandone praticamente ogni singolo aspetto sarà possibile apprezzare i vantaggi derivanti da un modello OOP ed affinare così le proprie capacità. Vediamo come sarà composta la nostra applicazione che d'ora in avanti verrà denominata FormCheck.
Per seguire meglio gli esempi è possibile scaricare sia il pacchetto che contiene l'applicazione, sia il pacchetto che contiene l'estensione e che tratteremo alla fine del primo esempio. L'applicazione può essere
Il form
Il form di questa applicazione sarà molto semplice e dunque costituito solo da campi di testo (elementi input di tipo text), dato che il nucleo fondamentale sarà rappresentato dallo script che contiene le gerarchie di classi. Il nostro modulo sarà dunque composto dai seguenti campi:
- un nome ("name") che dovrà contenere solo caratteri alfanumerici e la cui lunghezza dovrà essere compresa tra i 4 ed i 15 caratteri
- un cognome ("lastname") che come il precedente, dovrà contenere solo caratteri alfanumerici e la cui lunghezza dovrà essere compresa tra i 4 ed i 15 caratteri
- un' e-mail ("email") che dovrà essere scritta nella forma comune "mailname@mailserver.mailext"
- un anno di nascita ("year") che per ovvi motivi dovrà essere superiore al 1900
Tutto questo verrà inserito in una semplice pagina HTML, che interagirà con lo script PHP.
La gerarchia di classi
Sarà compito della parte server-side stabilire se tutti i campi del form sono stati inviati correttamente. Ciò accadrà tramite la classe FormCheck
, la classe astratta AFormCheck
e l'interfaccia IFormCheck
. Ecco in breve i loro compiti principali:
- interfaccia
IFormCheck
: si occuperà di definire i namespaces dei metodi pubblici utilizzabili dalle classi della gerarchia. Ciò ci permetterà di uniformare il comportamento nel caso di più classi realizzate per adempiere al medesimo scopo, come vedremo nella seconda parte di questa parte pratica conclusiva - classe astratta
AFormCheck
: conterrà le proprietà fondamentali (pubbliche, protette e private), il metodo costruttore che sarà condiviso da ogni sottoclasse ed i metodi principali che si occuperanno dell'erroring e del tracking, ovvero della gestione degli errori presenti nei dati forniti dagli utenti - classe
FormCheck
: la classe finale utilizzabile direttamente dallo sviluppatore, che conterrà tutti i metodi ridefiniti richiesti dall'interfaccia IFormCheck e che si occuperà della validazione dei dati forniti dagli utenti
Se tutti i campi forniti allo script PHP soddisfano le nostre condizioni, allora verrà visualizzato un messaggio che indicherà che l'operazione ha avuto un esito positivo, ed i dati inseriti verranno pubblicati. In caso contrario, verrà tenuta traccia sia di ogni campo inviato correttamente sia di ogni campo errato, in modo che l'utente abbia la possibilità di effettuare modifiche mirate a soddisfare tutti requisiti.
Conclusione
Prima di passare alla lezione successiva, è opportuno fare diverse considerazioni in merito a questa applicazione. In primo luogo, il metodo rappresentato in questa parte della guida rappresenta solo una delle tante strade con cui si potrebbe procedere: sta allo sviluppatore modificare i vari metodi o comportamenti interni per adattarli al meglio alle proprie esigenze.
Inoltre, il compito della validazione di un form è un punto di fondamentale importanza per le applicazioni moderne, che nella maggioranza dei casi implica la presenza di un Database Management System. La sicurezza è IL requisito fondamentale in questo tipo di applicazioni, e non va assolutamente trascurata, pena l'instabilità del sistema e la perdita di dati sensibili. Sebbene siano presenti dei validi controlli nelle classi FormCheck
, essi non vogliono essere un punto di riferimento assoluto per la sicurezza. Ciò che vuole essere trasmessa è unicamente l'importanza della OOP in PHP.