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.
Se vuoi aggiornamenti su Development inserisci la tua email nel box qui sotto: