Riferimento alle variabili, alle funzioni, agli oggetti, ecc, tramite stringhe
Premessa: in linguaggio PHP, tutte le variabili, le funzioni, ecc, sono gestite tramite una tabella hash che utilizza come chiave il nome della variabile, della funzione o dell'oggetto (e a loro volta le proprieta' e i metodi dell'oggetto).
In PHP, proprio grazie alla gestione tramite la tabella hash per la gestione delle variabili, e' possibile utilizzare una particolare tecnica di riferimento per "indirizzo". Per esempio, analizzando il codice seguente si puo' vedere che sono state inizializzate 2 variabili:
$prima = "Questa e' la prima";
$seconda = "Questa e' la seconda";
Per accedere alle due variabili si puo' fare:
${"prima"} = $seconda;
Indicando tra parentesi graffe ( '{' e '}' ) il nome della variabile sotto forma di stringa ( ovvero con apice singolo ' o doppio " ) , quindi indicando la chiave da ricercare nella tabella hash delle variabili. Dopo l'esecuzione di questa istruzione la variabile "$prima" conterra' la stringa "Questa e' la seconda".
Vediamo il seguente codice:
$prima = "Sono la prima";
$riferimento = "prima";
echo $$riferimento;
Il codice produce in output la stringa
"Sono la prima"
questo perche' la variabile che si stampa non e' '$riferimento
', ma e' la variabile con chiave uguale al contenuto di '$riferimento
', ovvero '$prima
'. Questa tecnica e' identica alla precedente, ma permettendo di dinamicizzare l'accesso alle variabili.
Si puo' utilizzare la stessa tecnica di accesso anche per chiamare delle funzioni, vediamo un esempio che utilizza le due tecniche illustrate insieme:
function restituisci5()
//in questo linea viengono create le stringhe "restituisci5", "restituisci10", "restituisci15"
{
return 5;
}
function restituisci10()
{
return 10;
}
function restituisci15()
{
return 15;
}
$somma = 0;
$funzione="";
for( $i=5; $i<=15; $i=$i+5 )
{
$funzione = "restituisci".$i;
$somma = $somma + $funzione();
//$funzione() chiama la funzione definita con il nome contenuto in $funzione, quindi riferimento5, riferimento10 e riferimento15
}
echo $somma;
Questo spezzone di codice produce in output la somma "30", risultato delle operazioni:
- "$somma = 0 + 5
" nel primo ciclo
- "$somma = 5 + 10
" nel secondo ciclo
- "$somma = 15 + 15
" nel terzo e ultimo ciclo
La stessa cosa si puo' applicare agli oggetti e ai metodi degli oggetti, molto utili per esempio per caricare dinamicamente diiverse versioni di un oggetto come nell'esempio:
//qua vengono gestiti i dati
class HttpAPI {
var $lastAPI;
function HttpAPI()
{
$fp = fopen("http://myserver.api.responder/getData?username=myUser");
//qua vengono gestiti i dati
$lastAPI = $dataResult;
}
function getAPIData()
{
return $lastAPI;
}
}
class HttpAPI_2 {
var $lastAPI;
var $otherInternalVal;
function HttpsAPI_2()
{
$fp = fopen("https://my_other_server.api.responder2/getOtherData?login=myLogin");
$lastAPI = $dataResult;
}
function getAPIData()
{
return $lastAPI;
}
}
//In questo modo viene istanziato l'oggetto HttpAPI
$quali_API_devo_usare = "HttpAPI";
$obj = new $quali_API_devo_usare();
echo $obj->getAPIData();
//In questo modo viene istanziato l'oggetto HttpsAPI2
$quali_API_devo_usare = "HttpsAPI2";
$obj = new $quali_API_devo_usare();
echo $obj->getAPIData();
Imparare a definire classi e utilizzare oggetti