Come dichiarato e ribadito più volte nel corso della guida, uno dei vantaggi principali di un modello OOP risiede nell'estensibilità dell'applicazione, ovvero nella possibilità di aggiungere funzionalità personalizzate senza l'occorrenza di riscrivere completamente il nucleo principale. In questo caso ad esempio, vogliamo aggiungere un controllo che ci permetta di validare un ulteriore campo HTML del nostro form: la password.
Per velocizzare le procedure, supponiamo che la password dell'utente sia la stringa "ahy8978yha". Ora non ci resta che estendere la classe FormCheck
con le funzionalità desiderate:
// ----------------------------------------
// class MoreFormCheck
// extends FormCheck
// ----------------------------------------
class MoreFormCheck extends FormCheck {
public $pw;
public $pw2;
// costruttore
public function __construct() {
parent::__construct();
$this->pw1 = $_POST['pw1'];
$this->pw2 = $_POST['pw2'];
$this->setErrorMsgs(array('pw' => 'La password non è corretta.'));
}
// metodi di checking
public function checkPw() {
if($this->pw1 === 'ahy8978yha' && $this->pw2 === 'ahy8978yha') {
echo "
La password è stata inviata correttamente.
";
$this->clean['pw'] = $this->pw;
}
else {
$this->trackErrorMsg('pw');
}
}
// ...
Come possiamo vedere, la nostra classe MoreFormCheck
, estendendo la precedente FormCheck
, guadagna tutti i suoi metodi, senza l'occorrenza di una totale riscrittura. Dobbiamo solo ridefinire parte del costruttore, sia per dichiarare che per inizializzare le proprietà che conterranno le password. Tramite la chiamata del precedente costruttore (fornito dalla classe astratta AFormCheck
) unito alla keyword parent
, possiamo ripetere le precedenti procedure di inizializzazione. La chiamata al metodo setErrorMsgs
infine, ci permette di impostare il messaggio di errore che verrà visualizzato nel caso in cui le password siano errate.
Il metodo checkPw
si occuperà di gestire la nuova funzione di checking che andiamo ad aggiungere per controllare i valori delle password fornite dagli utenti. Il suo comportamento fondamentale è identico a quello di tutti gli altri metodi di checking ereditati da FormCheck
.
A questo punto non ci resta che finalizzare la classe ridefinendo il metodo pubblico checkAll
, che ovviamente conterrà la chiamata al nuovo metodo checkPw
:
// ...
public function checkAll() {
$this->checkName();
$this->checkLastname();
$this->checkEMail();
$this->checkYear();
$this->checkPw();
return $this->getErrorMsg();
}
}
Ora la classe è completa e pronta per essere inizializzata:
// ----------------------------------------
// Implementazione
// ----------------------------------------
$form = new MoreFormCheck();
if(!$form->checkAll()) {
exit();
}
else {
echo "<p><strong>Nome:</strong>" . $form->clean['name'] . "</p>";
echo "<p><strong>Cognome:</strong>" . $form->clean['lastname'] . "</p>";
echo "<p><strong>Mail:</strong>" . $form->clean['email'] . "</p>";
echo "<p><strong>Year:</strong>" . $form->clean['year'] . "</p>";
echo "<p><strong>Password:</strong>" . $form->clean['pw'] . "</p>";
}