PHP/Programmazione/OOP

Wikibooks, manuali e libri di testo liberi.


Copertina PHP/Copertina

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:

  1. 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
  2. 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.

Strumenti personali