PHP/Programmazione/OOP
Wikibooks, manuali e libri di testo liberi.
- Introduzione PHP/Introduzione
- Installazione e configurazione PHP/Installazione e configurazione
- Programmazione PHP/Programmazione
- Una pagina PHP PHP/Programmazione/Una pagina PHP
- echo PHP/Programmazione/echo
- Commenti PHP/Programmazione/Commenti
- Variabili PHP/Programmazione/Variabili
- Operatori PHP/Programmazione/Operatori
- Array PHP/Programmazione/Array
- Condizioni PHP/Programmazione/Condizioni
- Cicli PHP/Programmazione/Cicli
- Funzioni di base PHP/Programmazione/Funzioni di base
- Funzioni personalizzate PHP/Programmazione/Funzioni personalizzate
- Variabili globali PHP/Programmazione/Variabili globali
- $GLOBALS PHP/Programmazione/Variabili globali/$GLOBALS
- $_GET PHP/Programmazione/Variabili globali/$_GET
- $_POST PHP/Programmazione/Variabili globali/$_POST
- $_SESSION PHP/Programmazione/Variabili globali/$_SESSION
- $_COOKIE PHP/Programmazione/Variabili globali/$_COOKIE
- $_SERVER PHP/Programmazione/Variabili globali/$_SERVER
- File PHP/Programmazione/File
- Immagini PHP/Programmazione/Immagini
- Espressioni regolari PHP/Programmazione/Regexp
- Programmazione orientata agli oggetti PHP/Programmazione/OOP
- Programmazione avanzata con le classi PEAR PHP/PEAR
- PHP e i database PHP/Database
- Funzioni PHP per l'accesso ai database
- Database e object oriented PHP/Dboop
- PHP Design Pattern PHP/PHP Design Pattern
- Smarty PHP/Smarty
- Sicurezza delle applicazioni web PHP/Sicurezza
- PHP CLI: Command Line Interpreter PHP/Cli
- PHP GTK2: applicazioni desktop in PHP PHP/Gtk
- Wikibook credits
La programmazione object oriented (o Programmazione orientata agli oggetti, abbreviata spesso con OOP, object oriented programming) è uno stile, un paradigma di programmazione che consiste nel modellare un problema definendo degli oggetti che interagiscono fra di loro. Un oggetto è un insieme logico costituito da dati e da funzioni che manipolano i dati stessi e creano l'interfaccia tramite la quale l'oggetto interagisce con gli altri oggetti.
In questo capitolo tratteremo di programmazione orientata agli oggetti in PHP 5. Una delle maggiori novità di PHP 5, infatti, è proprio il nuovo object model che rende PHP un linguaggio realmente object oriented (orientato agli oggetti). Infatti, sono proprio queste nuove caratteristiche, che analizzeremo nel proseguio del capitolo, che hanno permesso lo sviluppo di tecniche aderenti ai pattern di progettazione più moderni.
Inoltre, come annunciato sul sito ufficiale, PHP 4 è ormai giunto al tramonto e non sarà più supportato a partire dall'agosto 2008.
Pertanto, per quanto riguarda l'object model di PHP 4, rimandiamo alla documentazione ufficiale (in italiano)
Indice |
[modifica] Le classi in programmazione
Una classe definisce una categoria di oggetti, aventi tutti le stesse caratteristiche. In effetti, il concetto di classe precede quello di oggetto:
- prima penso ad una classe e ne definisco i dati, detti attributi (i quali in realtà sono delle variabili), e le funzioni che li manipolano, dette metodi
- in seguito istanzio un oggetto a partire dalla classe: possiamo pensare alla classe come ad uno "stampino" per creare oggetti e ad un oggetto come ad un'entità "concreta" della classe. Per creare le istanze di ciascun oggetto è comodo utilizzare un costruttore, ovvero una funzione che imposti fin dall'inizio alcuni attributi fondamentali della classe.
Facciamo un esempio mentale. La classe "cane" definisce, nella nostra mente, il miglior amico dell'uomo, con tutte le sue caratteristiche, cioè gli attributi (per es. la razza, il colore del manto). L'oggetto "Lassie" è un'istanza della classe cane in cui l'attributo razza è Collie, il colore del manto è bianco e marrone, ecc....
[modifica] Incapsulamento
[modifica] Ereditarietà
[modifica] Polimorfismo
[modifica] Le classi in PHP
Per creare una classe in PHP è sufficiente utilizzare la sintassi:
class NomeClasse { //qui dentro vanno inserite le variabili pubbliche (gli attributi) e private della classe //e le funzioni (metodi) //questa funzione è il costruttore della classe e si chiama sempre così function __construct ($parametri) { //istruzioni... } } //qui finisce la dichiarazione della classe
In questo modo è stata creata una classe NomeClasse. Per crearne una nuova instanza, sarà sufficiente scrivere:
$var = new NomeClasse ($parametri_del_costruttore) //instanzia un nuovo oggetto della classe NomeClasse
Con questa istruzione creiamo un nuovo oggetto dallo "stampino" NomeClasse; i parametri passati tra parentesi sono quelli richiesti dalla funzione __construct (se prevista).
Per accedere agli attributi o ai metodi della classe si userà la sintassi:
$var->attributo = $a; //posso leggere o modificare gli attributi della classe $b = $var->esempioMetodo(); //un metodo può restituire un valore
Quando si lavora con le classi, la cosa più comoda è creare un file class.NomeClasse.php in cui inserire il codice della classe e poi richiamare tale file negli script in cui si desidera lavorare tramite l'istruzione include_once:
include_once("class.NomeClasse.php");
[modifica] Lavorare con gli attributi
Abbiamo detto che un attributo non è altro che una variabile della classe; bisogna tuttavia fare attenzione che tale attributo sia leggibile dall'esterno della classe. Infatti, quando si lavora normalmente con le variabili, queste hanno un ambito privato, ovvero possono essere lette solo all'interno della funzione o della classe all'interno della quale sono state dichiarate:
class Prova { $a = 5; //questa variabile è privata function metodo () { echo $a; //da qui la variabile può essere letta } } $ogg = new Prova() echo $ogg->a //non funziona, in quanto $a non è leggibile all'esterno della classe
Per poter leggere una variabile anche all'esterno della classe bisgona modificarne l'ambito da privato a pubblico utilizzando l'istruzione public:
class Prova { public $a = 5; //questa variabile è pubblica //... } $ogg = new Prova(); echo $ogg->a //stampa "5" $ogg2 = new Prova(); $ogg2->a = 3; echo $ogg2->a //restituisce 3
Riassumendo:
- le variabili normali sono leggibili solo all'interno della classe; questa scelta può essere dettata da motivi di sicurezza o per evitare errori. Queste variabili, dette private, possono essere dichiarate tramite l'istruzione
private. - le variabili con accesso pubblico (dichiarate tramite la parola chiave
public) sono leggibili anche dall'esterno della classe e sono quindi i suoi attributi.
All'interno della classe, per accedere ai suoi attributi, si usa la variabile $this, che restituisce l'istanza corrente della classe:
public $attr; //... $this->attr = "abcd"; //imposta l'attributo attr per l'istanza corrente //... echo $this->attr; //restituisce attr //...
[modifica] Lavorare con i metodi
Abbiamo detto che un metodo non è altro che una funzione, la quale va dichiarata all'interno della dichiarazione della classe:
class Prova { function somma($a, $b = 3) { //è una funzione come tutte le altre $c = $a + $b; return $c; } } $ogg = new Prova(); $num = $ogg->somma(5,2); //restituisce 7
Il metodo normalmente agisce sugli attributi della classe; normalmente questo è fatto per esempio dal costruttore.