giovedì 28 giugno 2018

Variabile dinamica in PHP

C'era una volta l'eval php, con la quale ad esempio, poter generare delle variabili dinamiche, se così si possono chiamare.
Poniamo ad esempio di avere un form generato dinamicamente, con un numero imprecisato di campi. Capire quali campi sono stati passati alla pagina di destinazione è indispensabile per poter fare gli opportuni controlli su di essi.
Se quindi da una parte è possibile sapere a monte quante variabili vengono passate ad una pagina, dall'altra è poi possibile generare dinamicamente una variabile php, utilizzando un nome seguito da un numero o un valore contenuto in un'altra varibile.

Probabilmente è più facile fare un esempio pratico, piuttosto che cercare di spiegare a parole questo concetto :p


Come creare una variabile dinamica in PHP


Se si vuole generare una varibile composta da più elementi, uno fisso ed uno dinamico, magari andandola ad utilizzare all'interno di un loop, ecco la sintassi php da utilizzare.

$nuova_variabile=${'variabile_'.$numero};

Con la sintassi ${} infatti, è possibile fare quello che su altri linguaggi si faceva con l'eval, ovvero generare una varibile dinamicamente.

Vediamo due righe di codice d'esempio:

$variabile_1="Franco";
$variabile_2="Mario";
$variabile_3="Antonio";
$variabile_4="Giovanni";
$variabile_5="Ugo";
for($i=1; $i<=5; $i++)
{
$nuova_variabile=${'variabile_'.$i};
echo "$nuova_variabile<br />";
}

Il ciclo in questione dunque, mostrerà a video il contenuto di tutte le varibili generate con il nome dinamico, una parte del quale sarà sempre fissa, mentre l'altra sarà composta dal numero incrementato in automatico in un loop.

Come usare questa cosa nel concreto?
Beh, a parte esempi di array dinamici php, prendiamo il caso del form dinamico con dieci campi che si chiamano nello stesso modo, fatta eccezione per una parte finale del nome incrementata con un contatore.
Se si vuole poi lato server fare i controlli e salvare i dati nel database, un metodo molto utilizzato è quello di passare dalla form un campo hidden contenente il numero di variabili da controllare, e poi ciclare il tutto come nell'esempio di poco sopra, con l'unica differenza che la variabile generata sarà ottenuta con una _request.

Se poi si vogliono pescare i dati di una tabella sql che ha tantissime colonne, normalmente bisognerebbe scrivere un sacco di codice sia per comporre la query (a meno che non si voglia usare il terribile asterisco *), sia per assegnare alle variabili php il contenuto delle singole colonne.
Per risparmiare un bel po' di tempo, soprattutto se le pagine che fanno queste query sono molte, si potrebbe salvare in un'array la struttura della tabella, indicando come valore il nome di ciascun campo, così:
$campitabella=array("nome","cognome","indirizzo","fax","telefono");
Poi, quando si sfoglia la tabella nel classico ciclo while, al posto di scrivere tutte queste righe:
$nome=$row['nome']);
$cognome=$row['cognome']);
$indirizzo=$row['indirizzo']);
$fax=$row['fax']);
$telefono=$row['telefono']);

Potremmo scrivere semplicemente:

foreach ($campitabella as $k=>$v) ${$k}=$row[$k];

Comodo, no?

Piaciuto l'articolo? Lascia un commento!

EmoticonEmoticon