Spesso ho la necessità di utilizzare variabili SUPERGLOBALI per i miei script.
Per risolvere questo problema il PHP offre nativamente $GLOBALS e global.
Il primo è deprecato oltre al fatto che la direttiva register_globals di default è impostata su OFF in tutte le versioni di PHP successive alla 4.2.0.
Il secondo invece è un metodo abbastanza scomodo...
Ho pensato, quindi, di adottare uno stratagemma sfruttando la supeglobalità delle costanti.
L'idea è molto semplice: serializzare le variabili dentro una costante che sarà quindi disponibile ovunque.
ecco il codice:
Codice PHP:
function GL_exist(){
$a = 0;
while( defined('_zzz_'.($a+1)) ){
$a++;
}
return $a;
}
function GL_set($arr_var){
$a = GL_exist();
if( defined('_zzz_0') ){
$memo = unserialize(constant("_zzz_$a"));
foreach($arr_var as $k => $val) $memo[$k] = $val;
define('_zzz_'.($a+1),serialize($memo));
}else{
define('_zzz_0',serialize($arr_var));
}
}
function GL_get(){
$a = GL_exist();
return unserialize(constant("_zzz_$a"));
}
che richiamo in questo modo:
Codice PHP:
# setto le variabili globali
$array_z['pron'] = array('mio','tuo','suo');
GL_set($array_z);
function prova(){
#richiamo le variabili globali
$GL = GL_get();
#corpo della mia funzione
echo $GL['pron'][0];
}
prova(); # stamperà: mio
#se ho la necessità posso aggiornare il valore delle variabili globali
$array_z['pron'] = array('nostro','vostro','loro');
GL_set($array_z);
function prova2(){
$GL = GL_get();
echo $GL['pron'][0];
}
prova2(); # stamperà: nostro
Ecco come funziona: con GL_set() memorizzo le mie variabili che leggo tramite GL_get().
Per avere disponibili all'interno della mia funzione tutte le variabili globali mi basta richiamare la funzione GL_get().
LIMITI:
Il principale limite di questo metodo sta nell'impossibilità di poter ridefinire o distruggere una costante e ciò implica di dover eseguire il controllo GL_exist() ed una maggior spreco di memoria a causa delle costanti già definite e che non riutilizzo.
Inoltre ciò obbliga a dover utilizzare una funzione per leggere la mia costante.
Mi farebbe piacere sapere cosa ne pensate, soprattutto i GURU di questo forum che sanno vedere lì dove io non riesco.... (mamma mia che frase
)