Ciao,
nella lezione 15 della guida ci sono scritte queste 2 regole che mi sembrano attinenti ma non riesco comunque a risolvere il problema...
-Sintatticamente, per dichiarare una classe come astratta, la parola chiave class ed il nome della stessa devono essere precedute dalla keyword abstract;
-Nota bene: se una classe contiene anche un solo metodo dichiarato come abstract, essa deve essere obbligatoriamente dichiarata come abstract, altrimenti verrà generato un Fatal Error (<-viceversa, non mi dice se una classe astratta debba contenere solo metodi dichiarati come astratti)
Il codice della classe è questo:
Codice PHP:
abstract class AFormCheck implements IFormCheck {
public $name;
public $lastname;
public $email;
public $year;
public $errorMsgs = array('name' => 'Il nome deve essere composto da caratteri alfanumerici e deve contenere dai 4 ai 10 caratteri al massimo.', 'lastname' => 'Il cognome deve essere composto da caratteri alfanumerici e deve contenere dai 4 ai 15 caratteri al massimo.', 'email' => 'L' e-mail deve essere composta nella seguente forma: "mailname@mailserver.mailext"', 'year' => 'L'anno di nascita deve essere superiore al 1900' );
private $err = '';
public $clean = array(); // costruttore
public function __construct() {
$this->name = $_POST['name'];
$this->lastname = $_POST['lastname'];
$this->email = $_POST['email'];
$this->year = $_POST['year']; }
// metodi di tracking/erroring
protected function trackErrorMsg($field) {
if($this->errorMsgs[$field]) {
$this->err .= "
" . $this->errorMsgs[$field] . "</p>";
}else{
$this->internalError();
}
}
protected function getErrorMsg() {
if($this->err != '') {
echo "<h4>Errore!</h4>";
echo $this->err;
return false;
}else {
echo "<h4>Ok!</h4>";
echo "
Tutti i campi del form sono stati inviati correttamente.</p>";
return true;
}
}
protected function internalError() {
trigger_error('Non esiste un errore di questo tipo.', E_USER_WARNING);
}
}
Sicuramente sbaglio io qualcosa o tralascio qualcosa che per te è ovvio ma per me sconosciuto...
Inoltre non è che voglio fare polemica, ma ad essere sincero, trovo questa guida di un'utilità pari a 0...
27 lezioni di teoria generale sulla programmazione ad oggetti e 1 esempio completo (non funzionante) di codice php oop...
Per chi vuole passare dal php procedurale all'oop secondo me ci sarebbe bisogno di molti più esempi concreti, almeno su quelle 5-6 tematiche di cui è pieno anche il forum (connessione db - invio email - form registrazione/login ecc) in modo da potersi rendere conto delle differenze di scrittura del codice, dell'utilità... dei vantiggi ecc...
Non mi servono a niente 27 lezioni sulla definizione di incapsulamento, ereditarietà, polimorfismo e altri concetti che trovo in qualunque guida di qualunque linguaggio oop perchè se nessuno mi mostra il vantaggio di definire una classe li dove ero solito definire una funzione, continuerò a scrivere procedure...
Imho ovviamente...