Cum sa extragi numele unei variabile in PHP?
4Exista momente cand vom avea nevoie de numele variabilei ca si string. Evident, acest lucru poate fi facut simplu in mod static, precizand numele efectiv. Dar ce se intampla in cazurile in care acest lucru trebuie sa proceseze variabile dinamice, ale caror nume nu sunt controlate decat de un sistem automat, el generandu-le, el distruagandu-le, el folosindu-le.
Care sunt defapt problemele?
Una dintre probleme e faptul ca PHP ofera initializarea variabilelor dintr-un string, dar nu si reversul. Spre exemplu, codul de mai jos este valid.
$x = 'varn'; $varn = 'Hello World!'; echo $$x; // afiseaza "Hello world"
Solutia?
Avand in vedere ca e o problema destul de importanta, ciudat este faptul ca internetul nu prezinta o rezolvare a acesteia, sau e foarte greu de gasit. Totusi, cineva a abordat problema intr-un mod ingenios, care va fi prezentat mai jos. Acesta s-a folosit de o functie destul de cunoscuta ce extrage toate variabilele definite dintr-un spatiu de lucru – get_defined_vars().
Apoi a fost generat un vector cu toate valorile variabilelor existente (practic s-a copiat tot continutul obiectului returnat de get_defined_vars), urmand „stricarea” valorii variabilei cautate. Din acest moment, evident, vectorul cu valori va fi alterat (toate informatiile trasnsferandu-se prin referinta). u urmeaza decat sa caute pozitia in vector unde valoarea noua nu corespunde cu cea veche si restaurarea valorii initiale.
< ?php function var_name (&$iVar, &$aDefinedVars) { foreach ($aDefinedVars as $k=>$v) //construim blocul identic returnat de get_defined_vars() $aDefinedVars_0[$k] = $v; $iVarSave = $iVar; //salvam valoarea originala a variabilei cautate $iVar =!$iVar; //alteram valoarea originala $aDiffKeys = array_keys (array_diff_assoc ($aDefinedVars_0, $aDefinedVars)); //cautam diferente $iVar = $iVarSave; //restauram valoarea originala return $aDiffKeys[0]; //returnam numele(cheia) variabilei cautate } ?>
Cum folosim?
$nume_var = "worldit"; echo var_name($nume_var, get_defined_vars()); //va afisa "nume_var"
Daca aveti intrebari nu ezitati sa le puneti aici, sau pe forum.
Daca acest articol contine o greseala, selecteaza cuvintele sau fraza gresita si tasteaza combinatia de taste Shift + Enter sau apasa click aici pentru a o raporta. Multumim!
Nici nu stii de cate ori am vrut sa fac chestia asta, dar niciodata n-am stiut. Thx andrei!
De curiozitate, ce ai incercat sa faci? Intreb asta, pentru ca eu recent m-am izbit de problema si era un aspect extrem de important, care daca nu-l depaseam, imi crea o problema grava de dinamica. 🙂
Nu mai tin minte, ultima oara cand am avut nevoie sa fac asta a fost acum un an, cred. Stiu ca lucram la o prostioara acasa si voiam sa aflu numele unei variabile.
The solution below won’t work like this:
$a = 10;
$b = &$a;
echo var_name($b, get_defined_vars()); // a instead of b.
here is my solution.
http://reeze.cn/2010/10/30/php-internal-how-to-get-variables-name-an-extension-implement/