Come già detto nelle puntate precedenti una classe è una collezioni
di variabili e di metodi che lavorano con queste variabili.
Diamo di seguito un esempio di definizione di classe:
<?php
class Carrello
{
var $articoli;
function add_art ($artnr, $num)
{
$this->articoli[$artnr] += $num;
}
function remove_art ($artnr, $num)
{
if ($this->articoli[$artnr] > $num)
{
$this->articoli[$artnr] = $num;
return true;
}
else
{
return false;
}
}
}
?>
Abbiamo definito in questo modo una classe Carrello che vorrebbe
implementare appunto un carrello per la spesa. Essa consiste di
un attributo $articoli e due metodi add_art e remove_art.
Lattributo articoli è un array associativo contenente il numero
degli articoli di un determinato tipo presenti nel carrello.
Notiamo che gli attributi sono individuati dalla parola chiave var
mentre i metodi sono indicati come function.
I metodi presentano, di seguito al nome e tra parentesi tonde la
lista dei parametri formali, mentre il corpo del metodo (ossia il
codice che implementano) è racchiuso tra parentesi graffe. Una funzione
può ritornare un valore tramite loperatore return.
Allinterno di una funzione la variabile $this significa
che si fa riferimento alloggetto corrente.
Come sappiamo le classi sono tipi; rappresentano quindi il modello
per una variabile attuale, loggetto. Per creare un oggetto
di una determinata classe si usa loperatore new.
Listruzione seguente
$Miocarrello = new Carrello;
crea un oggetto chiamato $Miocarrello dalla classe Carrello.
Per riferirsi ad un attributo o ad un metodo di un oggetto si usa
loperatore ->.
Per esempio listruzione
$Miocarrello->add_art(10,1);
aggiunge un articolo al carrello $Miocarrello chiamando il metodo
add_art e passando i parametri attuali scelti.
Attenzione: Dopo loperatore -> non si usa
mai il simbolo $ per riferirsi ad un attributo.
Abbiamo detto che una classe può essere estensione di unaltra
classe. La classe estesa o derivata ha tutti gli attributi e tutti
i metodi della classe genitore più quelli definiti nella dichiarazione
di estensione.
Attenzione: A beneficio degli utenti di C++ diciamo subito
che non è consentita lereditarietà multipla.
Vediamo adesso come estendere una classe facendo uso di un esempio:
class Carrello_etichettato
extends Carrello
{
var $etichetta;
function set_etichetta ($nome)
{
$this->etichetta = $nome;
}
}
La classe Carrello_etichettato estende la classe Carrello
tramite la parola chiave extends; dopo la dichiarazione destensione
segue, tra parentesi graffe, la lista dei nuovi attributi e limplementazione
dei nuovi metodi. Nel nostro caso abbiamo aggiunto un attributo
$etichetta per contenere il nome del proprietario e il metodo
set_etichetta per scrivere su di essa. Su un oggetto di questa
nuova classe possiamo ancora usare tutti i metodi della classe carrello
ed accedere agli attributi definiti nella superclasse.
Per ogni classe esiste un metodo speciale: il cosiddetto metodo
costruttore. I metodi costruttori sono delle funzioni che
sono chiamate automaticamente quando viene creato un nuovo oggetto.
Quando si definisce una classe il metodo costruttore viene creato
automaticamente e setta ai valori di default tutti gli attributi
della classe.
Per creare un metodo costruttore basta scrivere una funzione che
abbia lo stesso nome della classe di appartenenza. Utilizzare un
metodo costruttore può essere utile per inizializzare alcuni degli
attributi degli oggetti, anche in considerazione del fatto che una
classe PHP non può contenere costanti ma solo variabili. I costruttori
possono anche accettare argomenti e questi argomenti possono essere
anche opzionali. Ciò li rende ancor più utili.
Per il nostro carrello etichettato possiamo, per esempio, definire
il costruttore seguente:
function Carrello_etichettato
($nome = Sandro)
{
$this->etichetta = $nome;
}
In questo caso listruzione:
$Miocarello = new Carrello_etichettato;
assegnerà allattributo $etichetta il valore di default
Sandro, mentre listruzione
$Miocarello = new Carrello_etichettato(Luca);
setterà lo stesso attributo con il valore Luca.
Attenzione: per le classi derivate il costruttore delle super
classi non viene chiamato automaticamente.
Con quanto appena detto abbiamo concluso la trattazione degli oggetti
PHP, dimostrando ancora una volta quanto questo linguaggio si mostri
facile ed intuitivo.
Con la prossima lezione concluderemo la trattazione sui tipi di
dato analizzando i meccanismi per la loro manipolazione.
Torna all'indice Generale del corso di Corso di PHP di Software Planet