Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 2 di 50
  • livello avanzato
Indice lezioni

OOP vs Codice procedurale in PHP

Scopriamo le differenze fra la programmazione orientata agli oggetti e il più semplice modello procedurale realizzando il medesimo progetto in PHP. Osserviamo come nonostante la curva di apprendimento iniziale più ripida l'OOP si dimostri preferibile nello sviluppo di applicazioni complesse.
Scopriamo le differenze fra la programmazione orientata agli oggetti e il più semplice modello procedurale realizzando il medesimo progetto in PHP. Osserviamo come nonostante la curva di apprendimento iniziale più ripida l'OOP si dimostri preferibile nello sviluppo di applicazioni complesse.
Link copiato negli appunti

Prima di addentrarci nello studio vero e proprio dei concetti e delle teorie della programmazione ad oggetti, è bene avere le idee chiare sulle differenze che questo modello di programmazione pone rispetto al più semplice modello procedurale.

Questo perché molti sviluppatori PHP hanno probabilmente a disposizione un solido bagaglio di conoscenze sul codice procedurale, soprattutto chi ha lavorato a lungo con la versione 4. Per una completa analisi delle differenze teoriche, dei vantaggi e degli svantaggi tra modello ad oggetti e modello procedurale, l'articolo Codice procedurale vs OOP è un ottimo punto di riferimento.

Un wrapper per la stampa

Partiamo subito con un esempio pratico che ci permetterà di cogliere le rispettive differenze concettuali dei due modelli: un wrapper per stampare un paragrafo HTML contente del testo.

Codice procedurale:

function ph($txt) {
        echo "<p>" . $txt . "</p>";
}
// stampa il seguente HTML: "<p>This is a paraghrap</p>"
ph("This is a paraghrap");

Codice OOP:

class HTML {
        public function ph($txt) {
                echo "<p>" . $txt . "</p>";
        }
}
$html = new HTML();
// stampa il seguente HTML: "<p>This is a paraghrap</p>"
$html->ph("This is a paraghrap");

La prima, lampante differenza che emerge dal confronto tra questi due snippet è la diversa quantità di codice necessaria per giungere allo stesso fine: il modello OOP ne richiede infatti d più. La seconda differenza è che, mentre nel primo caso si può usare direttamente la funzione e quindi stampare il codice, nel secondo si deve prima istanziare un oggetto della classe HTML (il cui nome è scelto a nostro piacimento) e successivamente richiamare il metodo denominato ph.

Ma vediamo cosa accade se successivamente decidiamo di aggiornare le funzionalità volendo creare un ulteriore wrapper al paragrafo risultante, ovvero un elemento div, ed ottenere il seguente markup: <div><p>This is a paraghrap</p></div>:

Codice procedurale:

function div($txt) {
        echo "<div>";
        ph($txt);
        echo "</div>";
}
// stampa il seguente HTML: "<div><p>This is a paraghrap</p></div>"
div("This is a paraghrap");

Codice OOP:

class HTML {
        public function ph($txt) {
                echo "<p>" . $txt . "</p>";
        }
        public function div($txt) {
                echo "<div>";
                $this->ph($txt);
                echo "</div>";
        }
}
$html = new HTML();
// stampa il seguente HTML: "<div><p>This is a paraghrap</p></div>"
$html->div("This is a paraghrap");

Come è possibile notare, nel caso del modello procedurale si deve procedere alla creazione di una nuova funzione che richiama la precedente, mentre nel modello OOP tutta l'implementazione è centralizzata in un unico oggetto: la classe HTML. Le istanze di questa classe (nel nostro caso l'oggetto $html) possono usufruire di tutte le funzioni pubbliche dichiarate nella stessa.

Ti consigliamo anche