Un GM è un essere umano? Se si, puoi estendere la classe umano e farla ereditare alla classe GM: l’eredità in PHP Object Oriented Programming.

L’eredità è uno dei capisaldi della programmazione orientata agli oggetti. Ha numerosi vantaggi: scrittura di meno codice, flessibilità nella costruzione di applicazioni, risorse minimaliste e problema della ridondanza risolto. Che senso avrebbe per me creare un altra classe GM quando all’ interno della classe Umano per esempio mi ritrovo delle proprietà che sono uguali a quelle delle classe che mi appresto a creare (mi riferisco a nome e cognome per esempio, visto che sono variabili immutabili per tutti)? Perchè occupare inutilmente spazi di memoria, quando di fatto quello che mi serve già esiste e non devo necessariamente ricrearlo, a questo punto mi basterà semplicemente creare una classe derivata dipendente dalla classe madre senza dover reinventare la ruota. Per logica filosofica se tutti gli umani hanno un nome e un cognome, anche i GM avranno le stesse informazioni presenti nello stesso dna e per proprietà transitiva possiamo fare i solligsti aristotelici semplicemente estendendo la classe originaria. Ma la classe GM però ha delle prorietà che la classe madre non ha, come quella di elo, per esempio. Certo il punteggio elo come variabile appartiene esclusivamente alla classe derivata GM ma questo non è un ostacolo per la nostra programmazione. Quindi iniziamo a mettere le cose in pratica creando una classe Umano:

class Umano
{
public $nome;
public $cognome;

}

Ok e adesso come faccio a creare la classe gm come derivazione della classe madre? Usando la parola chiave extends, vediamola in azione, tenendo presente che di solito la prima lettera definita nella classe deve risultare per convenzione sempre maiuscola e che all’ interno del contenitore che ho creato definirò anche un membro che è la variabile elo:

class Gm extends Umano
{
public $elo;
}

Ok ma alla fine di tutte queste astrazioni posso tirare fuori dal cappello un esempio pratico con nomi e cognomi in stampa per esempio? Una prima cosa importante da capire nell’ ereditarietà è che le proprietà presenti nella classe umano sono rese disponibili sempre e ovunque per tutte le classi derivate. Quindi potremmo fare un esperimento. Ipotizziamo di voler stampare il nome e cognome del GM a video, posso ereditare anche dei metodi dalla classe madre? Aggiorniamo lo script sulla classe Umano e facciamolo diventare in questi termini:

class Umano
{
public $nome;
public $cognome;

function stampaNome()
{
echo “Mi chiamo $this->nome $this->cognome”;
}
}

L’utilità dell’ ereditarietà si vede proprio in pratica da questo esempio del metodo stampaNome (ricordiamo che per testare dal vivo il nostro codice si può andare direttamente su come suggerito da http://phptester.net/ comesuggerito dalla nostra ottava puntata https://umbriawaysemplifica.wordpress.com/2020/04/22/grande-maestro-iscritto-a-torneo-privo-di-euro-con-i-metodi-static-in-php-oop-puo-pagare-direttamente-in-euro/) . In sostanza la classe Gm avrà l’esclusiva come classe derivata di accedere gratuitamente (essendo stato impostato a tutto public) ai metodi della classe madre, quindi il gioco di prestigio che proponiamo è proprio questo: come è possibile che io a video riesco a stampare il nome e cognome del GM richiamando una classe che non è la sua? Bè essendo una classe derivata caratterizzata dalla parola chiave extends come chiarito precedentemente in questa nuova nona puntata, tutto diventa comodo. Proviamo a vedere l’effetto che fa impostando a video dei valori reali ricordando di inserire il tutto tra i tag <?php e finale ?>, quindi lo script completo diventerà:

class Umano
{
public $nome;
public $cognome;

function stampaNome()
{
echo “Mi chiamo $this->nome $this->cognome”;
}
}

class Gm extends Umano
{
public $elo;
}

$gm=new Gm();
$gm->nome=”Fabiano”;
$gm->cognome=”Caruana”;
$gm->elo=2820;

var_dump($gm);

echo “<br><br>”;

$gm->stampaNome();

l’effetto che fa a video ha del miracoloso:

object(Gm)#1 (3) { [“elo”]=> int(2820) [“nome”]=> string(7) “Fabiano” [“cognome”]=> string(7) “Caruana” }

Mi chiamo Fabiano Caruana

E con questo risultato finale raggiunto in questa nona puntata sulle classi non possiamo che rimanere come si dice in gergo tecnico “brasati”!

Crea un sito o un blog gratuitamente presso WordPress.com.

Su ↑