La Programmazione Orientata Agli Oggetti

Potrebbero piacerti anche

Scarica in formato docx, pdf o txt
Scarica in formato docx, pdf o txt
Sei sulla pagina 1di 5

PHP nasce nel 1994 ed è  

un linguaggio per lo scripting server-side, ovvero un linguaggio che


risiede in un server in remoto e che in fase di esecuzione interpreta le informazioni ricevute da un
client grazie al Web server, le elabora e restituisce un risultato al client che ha formulato la
richiesta. PHP si differenzia poi dai linguaggi di scripting client side, come per esempio JavaScript,
per via del fatto che il sorgente viene eseguito nel server, generando markup HTML da inviare al
client; quest’ultimo riceverà i risultati dell’esecuzione di un’applicazione ma il codice eseguito non
sarà mai visibile.

Il PHP è stato sviluppato principalmente per il Web (Gira su tutti in principali Web server ed in
linea di massima non dobbiamo apportare nessuna modifica al codice quando lo spostiamo da un
Web server ad un altro.), inoltre la maggior parte delle sue caratteristiche sono state
implementate in funzione di esso. Il linguaggio, ad esempio, consente di accedere in maniera
semplicissima alle richieste HTTP di tipo GET e POST.

GET è il metodo con cui vengono richieste la maggior parte delle informazioni ad un Web server,
tali richieste vengono veicolate tramite query string, cioè la parte di un URL che contiene dei
parametri da passare in input ad un’applicazione (ad esempio www.miosito.com/pagina-richiesta?
id=123&page=3). Il metodo POST, invece, consente di inviare dati ad un server senza mostrarli in
query string, è ad esempio il caso delle form.

In PHP esistono anche particolari strutture dati predefinite, chiamate variabili d’ambiente o
superglobals, che consentono di agevolare la programmazione coinvolgendo il server.

➢ Le più importanti sono:

$_GET Contiene i campi HTTP ricevuti in GET

$_POST Contiene i campi HTTP ricevuti in POST

$_FILES Consente di effettuare l’upload di variabili

$_SERVER Contiene le informazioni riguardanti il server

$_COOKIE Rappresenta i cookies HTTP

$_SESSION Rappresenta le variabili di sessione

uno dei compiti principali di un sito Web dinamico costruito con PHP è indubbiamente collegarsi
ad un database e interagire con i dati in esso archiviati. Lo sviluppatore interessato a costruire
delle applicazioni che possano colloquiare con MySQL, il DBMS (Database Management System)
Open Source per la gestione di database relazionali più utilizzato in Rete con PHP, ha a sua
disposizione principalmente tre scelte corrispondenti ad altrettante estensioni.
La prima possibilità, presente fin dalla versione 2.0 di PHP è rappresentata dall’estensione nativa
per MySQL, che mette a disposizione numerose funzioni, ma che non viene più fornita dal
linguaggio dalla versione 7. Quest’ultima consente un approccio alla programmazione di tipo
esclusivamente procedurale, non presenta quindi una propria interfaccia per la programmazione
ad oggetti.

La seconda possibilità, disponibile a partire da PHP 5.0, è l’impiego


dell’estensione MySQLi (MySQL improved), che può essere programmata tramite un
approccio Object Oriented sebbene mantenga la possibilità di poter essere utilizzata anche con un
approccio procedurale. MySQLi dispone di un’ampia libreria di funzioni utili

mysqli_connect_errno() Restituisce il codice di errore dall'ultimo errore di connessione

mysqli_connect() Apre una nuova connessione al server MySQL

mysqli_fetch_all() Recupera tutte le righe del risultato come un array associativo, un array
numerico o entrambi. parametri mysqli_fetch_all( result,resulttype ) ;

mysqli_query() Esegue una query sul database. parametri


mysqli_query( connection,query,resultmode ) ;

mysqli_free_result() Libera la memoria associata con un risultato

mysqli_fetch_assoc() Recupera una riga in un array associativo

mysqli_affected_rows() Restituisce il numero di righe interessate nella precedente


operazione MySQL

mysqli_insert_id() Restituisce l'id generato automaticamente utilizzato nella ultima query

mysqli_real_escape_string() Sfugge caratteri speciali in una stringa per l'uso in un'istruzione SQL

Un’altra possibilità di comunicazione con il DBMS è data dal ricorso all’estensione PHP Data
Objects (PDO), completamente orientata agli oggetti, e che non può quindi essere utilizzata con un
approccio procedurale. La caratteristica principale che differenzia questa estensione rispetto a
MySQLi è che essa dispone di driver per diversi DBMS, non limitandosi esclusivamente a MySQL.
Questo significa che se anche la nostra applicazione è stata progettata per comunicare con MySQL
possiamo adattarla molto semplicemente, con piccole variazioni del codice, ad altri software.

Prima della versione 5, PHP è stato un linguaggio sostanzialmente procedurale. Era in realtà dotato
di un singolare modello ad oggetti, ma assolutamente incompleto e tale da non permettere
l’applicazione dei concetti base della OOP: la Programmazione Orientata agli Oggetti.

Ora PHP dispone di un solido modello OOP


DIFFERENZE TRA OOP E PROCEDURALE

Il codice procedurale è un codice privo di classi ed oggetti che fa un uso massiccio delle funzioni .
Produrre codice procedurale è più semplice che produrre codice orientato agli oggetti. Questo
perché il codice procedurale non richiede nessuno studio particolare, all’infuori delle basi del
linguaggio e della documentazione sulle funzioni interne. Se si scrive codice procedurale non si
hanno molte regole da seguire: sta allo sviluppatore scegliere le sintassi, le metodologie e le
tecniche di scrittura che meglio preferisce. Questa totale forma di libertà in realtà, rappresenta sia
un vantaggio che uno svantaggio: molte delle accuse rivolta a PHP si riferiscono proprio a questa
mancanza di regole che, parecchie volte, permette di dare vita a veri e propri “script-spazzatura”,
difficili da mantenere e da condividere con altri sviluppatori. Un codice procedurale è
generalmente più immediato da produrre e più veloce da scrivere.

Il codice orientato agli oggetti permette di produrre applicazioni maggiormente mantenibili nel
tempo e completamente integrabili in altre applicazioni. La presenza di regole precise costituisce
un grande vantaggio per lo sviluppatore e soprattutto per gli sviluppatori abituati a lavorare in
team. Ciò permette di produrre codice pulito, scalabile, condivisibile ed altamente mantenibile.

Un buon codice OOP favorisce il 100% di estensibilità: è possibile aggiungere nuove o più
specifiche funzionalità tramite script addizionali senza alterare le precedenti gerarchie: è questo
uno dei poteri principali della Object Oriented Programming.

Prendiamo in considerazione, a scopo illustrativo, una situazione in cui abbiamo una classe
base Connect che racchiude gli strumenti necessari a connetterci ad un Database ed una classe
specifica ConnectToPartnerA (sottoclasse) che ci permette di collegarci al Database del nostro
partner denominato “A”.
Successivamente guadagniamo una collaborazione con il partner denominato “B” e vogliamo
interagire con i suoi DBMS affiancando alle funzionalità che avevamo creato in precedenza nuove
caratteristiche. Non occorrerà modificare le classi precedenti, ma basterà estendere la classe
base Connect con funzionalità specifiche per l’interazione con il nuovo partner: in questo modo
otterremo un codice modulare ed ulteriormente estensibile.

La programmazione orientata agli oggetti, comunemente indicata come OOP, è un approccio che
consente di sviluppare delle applicazioni complesse in un modo che è facilmente gestibile. Nel
mondo dell'OOP, entità reali come  Persona ,  Auto  o  Animale  sono trattate come oggetti. Nella
programmazione orientata agli oggetti, si interagisce con l'applicazione utilizzando gli oggetti.
Questo contrasta con la programmazione procedurale, dove si interagisce principalmente con le
funzioni e le variabili globali.

Nell'OOP, c'è un concetto di "classe", che viene utilizzato per modellare o mappare un'entità del
mondo reale a un modello di dati (proprietà) e di funzionalità (metodi). Un "oggetto" è un'istanza
di una classe, e si possono creare più istanze della stessa classe.
La classe definisce le proprietà. Per esempio, per la classe Persona, potremmo
avere  nome ,  età  e  numeroTelefono . Quindi ogni oggetto di persona avrà i propri valori per tali
proprietà. Si potrebbe dire che Una classe è simile alla definizione di una tabella in un 
database (relazionale), che rappresenta una certa entità Un'istanza (oggetto) è simile ad un record
specifico. La differenza sta però nel fatto che classi e istanze (oggetti) contengono anche funzioni.

COSTRUTTORI PER LE CLASSI

Un costruttore è un metodo di classe speciale che viene utilizzato per inizializzare le proprietà
dell'oggetto quando viene creato.

Per definire un costruttore è necessario il metodo  __construct .

OGGETTI

Per utilizzare una classe, è necessario istanziarla e il risultato finale è un oggetto. Così potremmo
pensare a una classe come a un progetto, e un oggetto è una cosa reale con cui lavorare. Per
istanziare una classe è necessario utilizzare la parola chiave  new. Se una classe ha definito il
metodo  __construct  e richiede degli argomenti, è necessario passare tali argomenti quando si
crea un'istanza di un oggetto. 

LIVELLI DI ACCESSO

Quando si definisce una proprietà o un metodo in una classe, si possono dichiarare tre livelli di
accesso —  public ,  private  o  protected .

Accesso pubblico

Quando dichiarate una proprietà o un metodo come pubblico, è possibile accedervi da qualsiasi
luogo al di fuori della classe. Il valore di una proprietà pubblica può essere modificato ovunque nel
codice.

Accesso privato

Quando dichiarate una proprietà o un metodo come  private , si può accedere solo dall'interno
della classe.

Accesso protetto

Infine, quando dichiarate una proprietà o un metodo come  protected , è possibile accedervi dalla
stessa classe che l'ha definito e dalle classi che ereditano la classe in questione.
Ereditarietà

L'ereditarietà è un aspetto importante del paradigma della programmazione orientata agli oggetti
che vi consente di ereditare le proprietà e i metodi di altre classi, estendendole. La classe che
viene ereditata è chiamata la classe genitore, e la classe che eredita l'altra classe è chiamata classe
figlio. Quando viene creata un'istanza di un oggetto della classe figlio, eredita pure le proprietà e i
metodi della classe genitore.

Per ereditare le classi bisogna utilizzare il metodo extends seguito dal nome della classe padre.

Potrebbero piacerti anche