Redazione
a- a+

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

C'è 1 commento
Staff
Ti interessano altri articoli su questo argomento?
Chiedi alla nostra Redazione!