Estendere una classe
Ora dopo aver scritto la nostra bella Classe
"Utente" decidiamo di espandere le sue
potenzialità, aggiungendo nuove funzioni.
Ci sono due modi per farlo:
- Editare direttamente la Classe "Utente"
- Creare una nuova Classe che espanda la prima
La prima opzione è al quanto banale, decisamente
più interessante la seconda! Vediamo come fare :
Creiamo una nuova classe con il nome NewUtente e inseriamo altre banali funzioni di inserimento/estrazione di dati dall'oggetto.
include ('Utente_class.inc'); //Collego alla classe a cui fa riferimento
class NewUtente extends Utente { //Classe che estende la prima
var $Forza,$Intelligenza,$Destrezza; //Variabili di Classe (DataMember)
function setStr ($IntStr) {
$this->Forza = $IntStr;
}
function setInt ($IntInt) {
$this->Intelligenza = $IntInt;
}
function setDex ($IntDex) {
$this->Destrezza = $IntDex;
}
function getStr (){
return $this->Forza;
}
function getInt (){
return $this->Intelligenza;
}
function getDex (){
return $this->Destrezza;
}
function getNewInfo (){ //funzione che stampa una tabelle con tutti i dati
$Intestazione = '
'; $return = $Intestazione.'
| Nome | Cognome | Età | Forza | Intelligenza | Destrezza | |
|
'. $this->Nome. ' |
'. $this->Cognome. ' |
'. $this->Eta. ' |
'. $this->Forza. ' |
'. $this->Intelligenza. ' |
'. $this->Destrezza. ' |
|
';
return $return;
}
}
?>
Ora creiamo l'oggetto e impostiamo le caratteristiche:
include ("NewUtente_class.inc");
$gigi = new NewUtente;
$gigi-> setNome("Luigi");
$gigi-> setDex(100);
$gigi-> setInt(75);
$gigi-> setStr(80);
$gigi-> setEta(19);
$gigi-> setCognome("Mancini");
echo $gigi->getNewInfo();
?>
Dunque dopo aver creato la nuova classe NewUtente abbiamo
inserito la parola chiave "extends" quindi abbiamo
definito nuove variabili locali, e le varie funzioni che si
occupano della loro gestione, infine abbiamo messo una
funzione che stampa le informazioni.Come avrete notato tutte
le funzioni della precedente classe sono state inglobate a
quella della nuova classe, possiamo quindi richiamare
qualsiasi funzione o variabile globale della classe. A patto
che nella nuova classe non si crei una funzione con un nome
già usato nella prima.
Un' esempio vi chiarirà le idee:
Class prima {
function stampaStr(){
echo "Prima";
}
}
Class seconda extends prima {
function stampaStr(){
echo "Seconda"
}
}
$Esempio = new seconda;
$esempio-> stampaStr();
ci darà in output Seconda, proprio perchè la
funzione stampaStr viene ridefinita nella seconda classe.
Naturalmente si puo' estendere solo una classe alla
volta :-).
Da questi brevi esempi si evidenzia instantaneamente, la
facilità di lettura del codice! Ora tramite poche
righe possiamo stampare una tabella per ogni nuovo utente che
vogliamo creare, si potrebbe attaccarlo ad un database e fare
fare le query in automatico.Qui l'unico limite è
la fantasia.
Altra particolarità si ha quando si crea una funzione con lo stesso nome della classe. In questo caso la funzione vienechiamata quando si crea l'oggetto.
Es:
Class Prova {
function Prova($variabile){
echo $variabile;
}
}
$Obj = new Prova("sono entrato!!");
Se facciamo eseguire questo codice ci darà in output
"sono entrato!!". Si potrà pensare benissimo
quindi di utilizzare questa proprietà
per settare dei parametri iniziali, o far partire una serie
di funzioni interne alla classe.
Naturalmente una volta creato un oggetto lo possiamo
duplicare, creando un nuovo oggetto con le stesse
caratteristiche (non si crea quindi come referenza dal
primo).
La sintassi è banalissima:
$oggetto2 = $oggetto;
Vi sono altri concetti più avanzati sulle classi quali il polymorphismo e la serializzazione. Ma credo siano argomenti troppo pesanti per quelli che iniziano a programmare (Forse in qualche Tutorial più in là ?).
L'utilizzo delle classi è sicuramente il metodo più funzionale per la produzione di codice flessibbile, potente e facile da gestire.Una volta scritta una classe essa può essere riutilizzata in qualsiasi momento ed estesa con una facilità enorme. Come tutto, per poter realmente acquisire L'OOP non serve alto che pratica, pratica e ancora pratica.