Viverre pericolosamente con OOP in PHP, costruttori e distruttori, quarta puntata

All’ indirizzo https://umbriawayvalorizza.wordpress.com/2020/04/20/vivere-pericolosamente-con-le-classi-php-terza-puntata/ abbiamo visto come implementare METODI all’ interno di una CLASSE. A questo punto non ci resta che approfondire un importante concetto, quello del COSTRUTTORE. Prendiamo in esame questa classe:

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

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

che cosa succede quando scrivo $gm=new gm(); fuori dal blocco per istanziare l’oggetto fisico figlio della classe? E’ come se ordinassi di creare qualcosa che poi alloggerà in memoria, di fatto sto costruendo dal nulla un oggetto. Ma allora se posso far nascere un oggetto posso anche inizializzare la classe con un costruttore che anzichè farmi richiamare la funzione manualmente come accadeva negli esempi presenti in https://umbriawayvalorizza.wordpress.com/2020/04/20/vivere-pericolosamente-con-le-classi-php-terza-puntata/ mi carica direttamente delle istruzioni e mi inizializza l’oggetto secondo le mie modalità?

Vediamo questo esempio aggiungendo del codice sempre in http://phptester.net/:

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

function __construct($n, $c, $e)
{
echo “ORA nasce l’oggetto GM”;
$this->nome=$n;
$this->cognome=$c;
$this->eta=$e;
}
}

//qui siamo usciti dalla classe e istanziamo l’oggetto

$gm=new gm(“Michele”, “Godena”, 2500);

var_dump($gm);

qui applico il metodo costruttore function __construct che assegna i valori iniziali con le proprietà dell’ oggetto, dopodichè contrariamente a quello che succedeva negli esempi precedenti qui siamo in grado di EVOCARE le proprietà della classe semplicemente istanziando l’oggetto con la parola chiave NEW che inietta nell’ output le nostre priorità di visualizzazione in maniera del tutto automatica, senza richiamare nessun nome di funzione. A questo punto il programmatore talentuoso potrà fare la domanda “ma se esiste un metodo costruttore esiste anche un metodo distruttore?”. Certamente vediamo un esempio:

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

function __construct($n, $c, $e)
{
echo “ORA nasce l’oggetto $n $c <br>”;
$this->nome=$n;
$this->cognome=$c;
$this->elo=$e;
}

function __destruct()
{
echo “*** $this->nome $this->cognome viene distrutto *** <br>”;
}

}

$gm=new gm(“Fabiano”, “Caruana”, 1987);

var_dump($gm);

La funzione costruttore accetta tre parametri in ingresso. Che cosa vedrò a video dopo aver inizializzato un nuovo oggetto che questa volta ha anche il metodo __destruct() incluso nella classe?

ORA nasce l’oggetto Fabiano Caruana
object(gm)#1 (4) { [“nome”]=> string(7) “Fabiano” [“cognome”]=> string(7) “Caruana” [“eta”]=> NULL [“elo”]=> int(1987) }
*** Fabiano Caruana viene distrutto ***

Sostanzialmente prima viene creato e inizializzato l’oggetto, poi eseguo il metodo var_dump() per vedere il tipo di dati presenti nell’ oggetto $gm dopodichè il costruttore finita la sua missione deve lasciare il posto al distruttore che non fa altro che eliminare dalla memoria l’oggetto.

Javascript e le regular expression parte due: interrogare una stringa

Dopo aver esplorato il potenziale delle espressioni regolari all’ indirizzo https://www.umbriaway.eu/2020/04/07/javascript-e-le-regular-expression-illuminazioni-celesti-pronte-all-uso/ , prendiamo in esame una ulteriore applicazione, quella dell’ interrogazione delle stringhe. Nell’ articolo precedente ci siamo soffermati in particolare sul metodo TEST messo a disposizione dall’ oggetto regular expression, ma di fatto abbiamo a disposizione molte frecce utili come il metodo SEARCH per esempio. Del resto l’uso delle espressioni regolari per interrogare una stringa è aggiuntivo rispetto a tutta una serie di funzioni messe a disposizioni da javascript per modellare le stringhe per l’appunto come substring () che estrapola pezzi di stringa anche inserendo dei parametri tra le parentesi, ossia dicendo da dove iniziare e cosa cercare, oppure la proprietà LENGHT che ci fa tirare fuori la lunghezza in caratteri o anche CHARAT per concatenare in coda altre stringhe al posto del consueto PUNTO o anche SLICE (per dividere in pezzi) piuttosto che REPLACE (che sostituisce) o INCLUDES(“li”) che circoscrive tra parentesi degli elementi specifici, o ancora TOUPPERCASE per trasformare tutto in maiuscolo o TOLOWERCASE per trasformare in minuscolo o piuttosto INDEXOF (“o”) che tira fuori l’indice di un certo carattere o tanto altro come STARTSWITH che interroga una stringa a partire da una data posizione. Insomma con la manipolazione classica delle stringhe abbiamo a disposizione una globalità di metodi da scrivere con la sintassi a gobba di cammello (ad esempio toUpperCase) che ricorrere alle regular expression è una risorsa aggiuntiva però molto utile da conoscere. Abbiamo visto che le regular inseriscono tutti i criteri che l’utente deve rispettare per inserire i dati all’ interno del blocco /……./ e alla fine potremmo anche inserire dei parametri del tipo /……./ g oppure /……./i o anche /………/m che significa rispettivamente una ricerca globale nel contesto analizzato, oppure una situazione no case sensitive nel caso della i dove non ci interessa fare differenza tra maiuscole e minuscole o indicazioni per la gestione multinlinea per la m finale. A questo punto prendiamo ad analizzare una stringa dove sono presenti dei nomi, quindi ipotizziamo di dover lavorare sulla seguente frase dove sono presenti tre nomi che vorremmo estrapolare per esempio dal contesto:

Il sodalizio di questi tre nomi Tizio proveniente da non si sa dove, Caio che arriva dall’ isola che non c’è e Sempronio è ormai consolidato da secoli. Oggi l’espressione si utilizza per citare tre nomi comuni qualsiasi, persone ipotetiche che servono come esemplificazioni schematiche o discorsive…

quindi dichiariamo una variabile e definiamo il suo contenuto usando gli apici ` del nuovo ecma script sei che si ottengono con ALT 96 da tastiera:

var testo = `Il sodalizio di questi tre nomi Tizio proveniente da non si sa dove, Caio che arriva dall’ isola che non c’è e Sempronio è ormai consolidato da secoli. Oggi l’espressione si utilizza per citare tre nomi comuni qualsiasi, persone ipotetiche che servono come esemplificazioni schematiche o discorsive`;
document.write(testo);
document.write(“<br><br>”);

Dopodiché dichiariamo una variabile regularexpression che conterrà al suo interno i criteri di ricerca. Per tirare fuori i nomi vediamo che abbiamo un appiglio e cioè quello delle lettere maiuscole visto che i nomi iniziano in questo modo per cui il criterio della stringa dovrà stabilire che serviranno delle lettere maiuscole a sostegno:

var regularexpression = /[A-Z]/;

per capire meglio questa sintassi si faccia riferimento all’ analisi già messa in atto all’ indirizzo https://www.umbriaway.eu/2020/04/07/javascript-e-le-regular-expression-illuminazioni-celesti-pronte-all-uso/ qui semplicemente stiamo dicendo al nostro pattern che l’utente dovrà digitare delle lettere maiuscole all’ interno del campo. Ma non basta perchè i nomi sono seguiti da lettere minuscole e quindi dobbiamo dire al pattern che ALMENO UN CARATTERE minuscolo dovra essere presente a sostegno dopo il primo blocco e questo lo si ottien tramite il +, quindi la nostra formula magica diventa:

var regularexpression = /[A-Z][a-z]+/;

a questo punto aggiungiamo un modificatore alla fine per dire che ci interessa sottoporre questa espressione contestualmente a tutta la globalità del testo presente e questo comando viene semplicemente messo in atto inserendo una g finale:

// inizio script

var regularexpression = /[A-Z][a-z]+/g;

a questo punto possiamo usare il metodo SEARCH per estrapolare la prima occorrenza dove verrà individuata la prima maiuscola quindi:

var exp = /[A-Z] [a-z]+/g;
risultato = testo.search(exp);
document.write(risultato);
document.write(“<br><br>”);

// fine script

che cosa vedrò a video come risultato? Un bel numero zero e il motivo è evidente perché la frase in posizione zero inizia con una maiuscola quindi ripetiamo l’esperimento portando a minuscola la prima lettera. Ripetendo l’esperimento dopo un aggiornamento a video scopro che quello che ottengo adesso è un bel 32 che sta a significare che la prima lettera maiuscola che incontra parte dalla posizione 32 partendo da zero, provare per credere, pardon contare per credere. Infatti la prima lettera maiuscola di Tizio si trova proprio in posizione 32 e questo non è male come punto di partenza per le nostre ricerche. Ma se volessi qualcosa di più potente che mi dice quali sono tutti gli elementi? dovro usare il metodo match al posto di search:

var exp = /[A-Z] [a-z]+/g;
risultato = testo.match(exp);
document.write(risultato);
document.write(“<br><br>”);

che cosa ottengo questa volta a video? Il browser mostrerà: Tizio,Caio,Sempronio,Oggi non male vero? Se volessi tradurre il mio pattern che ha come criterio la ricerca di una maiuscola seguito da minuscole in una ricerca di occorrenze intese come array? Potrei aggiungere

document.write(“Trovate “+res.length+” occorrenze <br>”);
document.write(res);
document.write(“<br><br>”);

il browser a video mostrerebbe:

Trovate 4 occorrenze
Tizio,Caio,Sempronio,Oggi

essendo il tutto diventato un array adesso è semplice estrapolare con operazione mirate elementi target. Per esempio se volessi estrapolare solo Caio che è il primo elemento dell’ armadio partendo da zero mi basterebbe scrivere:

document.write(res[1]);
document.write(“<br><br>”);

per ottenere la scritta CAIO. E se volessi estrapolare un solo elemento alla volta dalla lista array? Lo posso usare utilizzando il metodo EXEC tipico delle espressioni regolari che mantiene memoria di quanto fatto precedentemente:

document.write(exp.exec(testo));
document.write(“<br>”);

Ok adesso proviamo a fare un ultimo esperimento finale, togliamo la g da:

var exp = /[A-Z] [a-z]+/g;

che cosa otterrei a video ad esempio per il metodo EXEC? La domanda ai posteri ma intuitivamente possiamo già capire la portata di quel piccolo modificatore o punto G: EXEC non conserverebbe memoria delle sue operazioni precedenti per esempio da qui l’importanza di saper mettere modificatori performanti quando richiesto.

Blog su WordPress.com.

Su ↑