web design umbriaChe stai a provocà? Ci vogliono almeno due anni di esperienza per districarsi con questo nuovo paradigma che da PHP versione cinque ha preso quota implementando metodi per scalzare le versioni precedenti orientate al procedurale, ossia alla scrittura di codice che tiene conto di una sequenza operazionale a cicli di lavorazione. Si perchè a un primo approccio entrare nel magico mondo delle definizioni teoriche di classi di oggetti che occupano spazio di memoria, di proprietà e di metodi che in qualche modo presuppongono l’idea di fasi staccate a livello modulare è tutt’ altra cosa che programmare in procedurale. Come al solito conviene subito fare pratica. Innanzitutto come possiamo definire un oggetto? Come l’istanza di una classe, ossia un quidfisico legittimato ad esistere che occupa uno spazio di memoria, quindi come figlio di una classe. Quindi per classe cosa si intende? Il genitore teorico con le sue definizioni dell’ oggetto che verrà istanziato ereditando tutte le sue proprietà e metodi (sinonimo di funzioni, ad esempio con apriLibroPagRandom potrei indicare un metodo che consente all’ utente di leggere un aforisma a caso presente dentro una pubblicazione). Ipotizziamo di lavorare sulla classe Grande Maestro o GM. Essendo una persona fisica un GM avrà un nome e un cognome, si presuppone anche una età e una valutazione ufficiale espressa in forza agonistica o punti elo. Vediamo in pratica come si può astrarre l’idea di GM con una programmazione PHP orientata agli oggetti. Tra i tag di inizio apertura <?php e fine chiusura ?> scriveremo il seguente codice:

class gm
{
public $nome;
public $cognome;
public $eta;
public $elo;
}

$gm=new gm();
$gm->nome=”Fabiano”;
$gm->cognome=”Caruana”;
$gm->eta=27;
$gm->elo=2819;

echo $gm->nome;
echo “<br>”;
echo “$gm->nome $gm->cognome – anni $gm->eta – punteggio elo $gm->elo”;

per vedere in azione il seguente codice cercare in rete uno dei tanti validatori php presenti in rete tipo http://phptester.net/ che ci darà un risultato a video del tipo:

Fabiano
Fabiano Caruana – anni 27 – punteggio elo 2819

ora analizziamo la seguente particella di codice che crea la definizione TEORICA di classe:

class gm
{
public $nome;
public $cognome;
public $eta;
public $elo;
}

Qui abbiamo definito una classe, simile al mondo delle idee di Platone, è un qualcosa di puramente teorico che ci consente di raggruppare delle proprietà all’ interno dell’ idea creata. Un GM è come una classe Persona ha un nome e cognome e delle caratteristiche elencate sopra. Un GM avrà anche dei metodi che qui non sono enunciati presenti. A questo punto non ci resta che creare il nostro oggetto fisico che è figlio della classe istanziandolo con la parola chiave NEW:

$gm=new gm();

a questo punto in memoria c’è un reale oggetto fisico istanziato dalla classe gm, dopodichè per accedere alla stampa delle proprietà singole o multiple della classe non facciamo altro che usare la sintassi convenzionale freccia -> che richiama le voci di nostro interesse

$gm->nome=”Fabiano”;
$gm->cognome=”Caruana”;
$gm->eta=27;
$gm->elo=2819;

echo $gm->nome;
echo “<br>”;
echo “$gm->nome $gm->cognome – anni $gm->eta – punteggio elo $gm->elo”;

A questo punto sorge spontanea una domanda. Se io volessi stampare anche stampare a video le partite vinte nel 2020 lo posso fare visto che la proprietà non fa parte della definizione della classe originale? Certo che lo posso fare ad esempio potrei aggiungere una nuova variabile wingame_2020:

class gm
{
public $nome;
public $cognome;
public $eta;
public $elo;
}

$gm->nome=”Fabiano”;
$gm->cognome=”Caruana”;
$gm->eta=27;
$gm->elo=2819;
$gm->wingame_2020=15;
//stampo a video
echo $gm->nome;
echo “<br>”;
echo “$gm->nome $gm->cognome – anni $gm->eta – punteggio elo $gm->elo”;
echo “<br>”;
echo “partite vinte nel 2020:$gm->wingame_2020”;

la variabile wingame_2020 non è presente nella definizione della classe quindi non stupiamoci se
il nostro validatore in rete http://phptester.net/ ci restituerà un semplice warning (che non sottolinea un errore vero e proprio), un semplice avvertimento che ci dice che non abbiamo dichiarato qualcosa nella classe:

WARNING Creating default object from empty value

questo di fatto sottolinea solo una cattiva prassi di programmazione in quanto il risultato corretto dello script non viene penalizzato, infatti a video vedrò:

Fabiano
Fabiano Caruana – anni 27 – punteggio elo 2819
partite vinte nel 2020:15

alla fine di questo esperimento possiamo intuire che possiamo personalizzare le classi come vogliamo ma tuttavia è BUONA PRASSI DI PROGRAMMAZIONE DEFINIRE TUTTE LE CARATTERISTICHE DELL’OGGETTO DIRETTAMENTE NELLA CLASSE AL FINE DI OTTENERE UN CODICE PULITO E CONGRUENTE. La nostra divagazione metafisica sulla programmazione orientata agli oggetti in php è terminata. Alla fine di questo viaggio difficilmente potremmo andare in giro a raccontare che conosciamo OOP, la programmazione orientata agli oggetti su PHP!