PHP5 ad oggetti: i vantaggi
Vediamo quali sono le caratteristiche ed i vantaggi della programmazione orientata agli oggetti in PHP 5. Codici ed esempi.
Già in PHP 3 si parlava di programmazione orientata agli oggetti (OOP), tanto è vero che il modello “Object Orientied” (OO) offriva anche il supporto all’ereditarietà e permetteva a una classe (e a un oggetto) di aggregare metodi e proprietà, ma non altro.
Con il PHP 4 il modello OO non fu toccato, o comunque non fu introdotto nulla di particolare. Nonostante i suoi limiti e le sue difficoltà, il modello a oggetti del PHP era, ed è stato, largamente usato nello sviluppo web in applicazioni PHP di notevoli dimensioni. L’utilizzo del paradigma OOP è diventato il punto focale della nuova release PHP 5.
Il limite principale che si riscontrava in PHP 3 e PHP 4 era che la semantica di copia degli oggetti era la stessa per i tipi nativi. Ciò comportava che l’assegnazione di una variabile che punta a un oggetto a un'altra variabile dava luogo a una copia dell’oggetto stesso. Ciò influiva negativamente sulle prestazioni, ma in linea generale implicava anche strani comportamenti e malfunzionamenti dato che si poteva ritenere, erroneamente, che entrambe le variabili puntassero lo stesso oggetto. In realtà non era così. Infatti le variabili puntavano a copie separate dello stesso oggetto e ciò comportava che la modifica di uno di essi non implicava la modifica dell’altro.
Possiamo spiegare ciò con un pratico esempio:
class Utenti{
var $name;
function getNome(){
return this->nome;
}
function setNome($nome){
$this->nome=$name;
}
function Utente($nome){
$this->setNome($nome);
}
}
function changeNome($person, $nome){
$person->setNome($nome);
}
$person=new Utente(“Roberto”);
changeName($person, “Gianni”);
print $person->getNome();
Il codice dovrebbe in teoria fare la seguente operazione: “dato l’utente Roberto, cambiare il nome in Gianni”
$person=new Utente(“Roberto”); changeName($person, “Gianni”);
e restituire a video “Gianni”.
print $person->getNome();
Diciamo in teoria perché, nella pratica, con PHP 4 o 3 questo codice darebbe come risultato finale “Roberto”.
Quale è il motivo di tale errore? È vero che viene passato l’oggetto $person alla funzione changeNome() per valore, quindi $person risulta copiato e changeNome() si comporta come una copia di $person. Come si può notare, questo comportamento inganna chi programma, soprattutto chi proviene da C++ o da Java, dove le variabili sono accompagnate da un handle (puntatore) all’oggetto e, di conseguenza, quando la variabile è copiata, è duplicato solo l’handle e non l’intero oggetto. Sia in PHP 4 che nel PHP 3 ciò non è invece implementato.
In PHP 5 le cose cambiano: l’infrastruttura del modello a oggetti è stata riscritta in modo da operare con gli handle degli oggetti. A meno di non volere clonare un oggetto volutamente, ricorrendo alla keyword clone, non si verifica la possibilità di creare duplicati “nascosti” di oggetti.
In PHP 5, infine, non è necessario passare gli oggetti per riferimento né assegnarli per riferimento (il passaggio e l’assegnamento per riferimento sono comunque supportati).
Il supporto alla programmazione Object Oriented è uno dei maggiori punti di forza della versione 5 di PHP e rappresenta la normale evoluzione di un linguaggio che, per risolvere problemi complessi garantendo affidabilità e manutenibilità, si è orientato verso paradigmi più vicini alla realtà.
La metodologia per affrontare un problema Object Oriented consiste nel suddividerlo in sottoinsiemi composti da elementi tra loro correlati, che contengano sia i dati che li rappresentano sia le informazioni comportamentali che permettono a questi sottoinsiemi di vivere di vita propria e di coesistere in relazione con altri sottosistemi del sistema più complesso.
I sottosistemi sono organizzati in strutture gerarchiche, le cui fondamenta sono chiamate oggetti.
Un oggetto è quindi una entità logica che contiene sia dati sia il codice che manipola i dati. Gli oggetti della stessa natura sono riuniti in classi.
Una classe è un tipo di dato che al suo interno definisce tutta la struttura degli oggetti che vuole descrivere. A sua volta una classe definisce:
- attributi(ovvero le proprietà), che compongono la struttura dei dati che descrive una classe di oggetti;
- metodi, cioè le operazioni che possono essere compiute all’interno dell’oggetto, in particolare sugli attributi.
Un oggetto viene definito come una istanza di una classe per indicare la relazione analoga a quella che intercorre tra una variabile e il suo tipo.
In conclusione possiamo dire che con il PHP 5 lo sviluppatore adotta una struttura OOP e acquisisce benefici e vantaggi che nelle versioni precedenti non aveva:
- regole precise;
- migliore qualità dello sviluppo di applicazioni;
- modularità dell'applicazione;
- manutenibilità del progetto;
- estensibilità dell'applicazione;
- possibilità di usufruire dei design pattern;
- possibilità di usufruire dei principali web service;
- presenza di nuovi costrutti.
Il modello a oggetti consente agli sviluppatori PHP versione 5 di sviluppare applicazioni usufruendo di strumenti come iweb service e di modalità logiche del tipo di design pattern e classi astratte che permettono la creazione di sistemi web complessi e di ultima generazione.
Ti potrebbe interessare anche
commenta la notizia
Chiedi alla nostra Redazione!