Sei STATIC? Allora dovresti fare ginnastica: OOP e PHP, perché i richiami alle variabili statiche offrono flessibilità alle applicazioni, settima puntata

Nelle ultime puntate di OOP e PHP come https://umbriawayincrementa.wordpress.com/2020/04/22/pubblico-o-privato-questo-non-e-un-film-sugli-enti-dislocati-sulla-penisola-ma-oop-e-php/   abbiamo esplorato il potenziale offerto dai progetti che presentano una visibilità delle variabili (o proprietà) pubbliche o private, dipende molto anche dalle caratteristiche del progetto. A questo punto c’è una nuova parola che entra in scena STATIC. Ma di che stiamo parlando? Supponiamo che nella nostra classe GM debba trovarmi nella necessità di creare un account utente per un sito che ospita un area riservata magari con dei servizi a pagamento. Sappiamo che le classi hanno la funzione di proporre una riutilizzabilità del codice per cui potrei usare la classe ACCOUNT anche in altri progetti, quindi inizierò ad avere una classe che ospiterà un paio di variabili canoniche del tipo username e password:

class Account
{
private $username;
private $password;

}

supponiamo che ogni volta che un oggetto si istanzi su questo oggetto io voglia tenere il conto delle nuove istanze istanziate (è un gioco di parole ma rende l’idea). Quanti nuovi oggetti sono stati creati su quella classe? Sappiamo che una classe è un qualcosa di unico nel suo genere e che non possiamo prendere come riferimento ogni oggetto per fare un conto centralizzato del numero che ci interessa, quindi per forza dovremmo introdurre all’ interno della classe una proprietà universale che ha un valore assoluto che mai verrà modificato. Quindi ci viene in aiuto il nostro STATIC, una parola chiave che fa proprio al caso nostro perchè conosciamo i limiti dei metodi private perché leggono solo i membri privati dove vengono definiti, mentre in questo caso la nostra esigenza è un altra, ci serve una variabile contatore che si incrementa ogni volta che una nuova istanza viene creata. per cui iniziamo a introdurre una nuova voce nella nostra classe, private static $count;

class Account
{
private $username;
private $password;
private static $count;
}

A questo punto ci serve un metodo che prende in ingresso l’oggetto istanziato e lo incrementa ogni volta che l’operazione di un nuovo oggetto creato si ripete, quindi siccome abbiamo anche visto quale è l’utilità di un costruttore, cioé quella di inizializzare in automatico delle operazioni al momento della creazione dell’ oggetto, ci inventiamo una funzione (o metodo) __construct (è il modo convenzionale di implementare un costruttore) che fa al caso nostro, inserendo anche un nuovo elemento quella della costante PREFIX (per convenzione si scrivono in maiuscolo) che farà da separatore prima del numero incrementato:

class Account
{
private $username;
private $password;
private static $count;

const PREFIX=”user_”;

function __construct($u, $p=”12345″)
{
$this->username=self::PREFIX.$u;
$this->password=$p;

self::$count++;
printf(“Creato $this->username: account n. %d <br>”, self::$count);
}
}

Che fa sostanzialmente questo costruttore? Accetta due parametri di ingresso, in cui nel secondo quello della password ($p) diciamo arbitrariamente che ha un valore universale se non viene inserito, in questo modo quando verrà creato l’ogetto io dovrò soltanto digitare $u, ossia lo username. Poi assegno i parametri degli argomenti inseriti tra parentesi a delle assegnazioni dell’ oggetto account, tenendo appunto presente che grazie alla costante prefisso avrò poi un separatore con il numero incrementale nel conteggio delle istanze create. Il tutto sembra più difficile da raccontare che a farsi in quanto una volta istanziati i nostri oggetti e ottenuto il nostro script, grazie a http://phptester.net/ a video otterremo:

class Account
{
private $username;
private $password;
private static $count;
const PREFIX=”user_”;

function __construct($u, $p=”12345″)
{
$this->username=self::PREFIX.$u;
$this->password=$p;

self::$count++;
printf(“Creato $this->username: account n. %d <br>”, self::$count);
}
}

$a=new Account(“Svidler”);
$b=new Account(“Aronian”);
$c=new Account(“Carlsen”);
$d=new Account(“Piscopo”);

RISULTATO A VIDEO e risposta alla domanda quanti oggetti sono stati istanziati:

Creato user_Svidler: account n. 1
Creato user_Aronian: account n. 2
Creato user_Carlsen: account n. 3
Creato user_Piscopo: account n. 4

Da notare infine il sibilinno simbolo arcano geroglifico o assiro babilonese %d che funziona solo da SEGNAPOSTO per lasciare spazio a self::$count ossia la nostra variabile statica. Se ne deduce quindi che i caratteri i due punti ripetuti sono proprio un modo caratteristico nella sintassi di PHP di riconoscere le proprietà statiche di una classe che sono per l’appunto dei valori assoluti presenti nella classe come riferimento per tutti gli oggetti che verranno istanziati