PHP afișează toate variabilele post-variabile. Variabile în PHP.

Cu siguranță aveți un dulap sau un dresser acasă. Principiul utilizării lor este simplu: eliminăm lucrurile pe care nu le avem nevoie acum, dar pot avea nevoie după un timp.

Variabilele sunt aranjate în același mod. Ei pot pune o valoare și pot păstra acolo până când este nevoie.

Crearea de variabile

Puneți valoarea variabilei după cum urmează:

În codul de mai sus, am creat un nume variabil $ și am pus-o în valoarea lui Ivan, apoi a creat o variabilă de $ $ și a atribuit o valoare de 20.

Numele "variabil" înseamnă că valoarea sa poate varia în timpul executării scriptului:

În unele limbi, variabila trebuie mai întâi să "declare", apoi să o folosească. Nu există anunțuri în PHP - variabila este creată în momentul în care o puneți în ea.
Cu toate acestea, programatorii PHP spun adesea "declară o variabilă" în loc de "creați o variabilă".

De asemenea, în loc de "pus în valoare variabilă", se spune adesea că "atribuie o valoare".
Motivul este simplu - simbol \u003d, datorită căruia salvăm valoarea la o variabilă, numită "operator de atribuire". Prin urmare, termenul "alocare".

Reguli de numire a variabilelor

1. Numele variabilei începe cu simbolul $.

2. Al doilea simbol poate fi litera sau simbolul de închidere _

Numele variabilelor sunt durabile de caz. $ Nume și $ nume sunt diferite variabile.

Valoarea variabilă a ieșirii pe ecran

Puteți retrage variabila utilizând echipa Echo deja cunoscută de noi:

Comanda ECHO vă permite să afișați simultan mai multe valori:

Notă, am fost transferați la valorile ECHO 2, despărțind-le cu o virgulă. Deci, putem transmite orice seturi de valori. Următoarele două exemple vor duce la același rezultat:

De asemenea, în PHP există o sintaxă abreviată a ieșirii variabilelor. In schimb

Înainte de versiunea PHP 5.4, sintaxa abreviată a funcționat numai atunci când directiva Short_Open_TAG este activată în setările PHP, care permite, de asemenea, eticheta de deschidere abreviată

Verificați valoarea variabilei

Comanda ECHO nu este întotdeauna convenabilă pentru a verifica valoarea curentă a variabilei. De exemplu, atunci când încercați să transmiteți un șir gol "" Absolut nimic nu va fi afișat pe ecran. Și nu este clar ce cauză este într-un cod variabil sau non-de lucru gol.

Prin urmare, pentru a verifica valoarea variabilă, funcția var_dump () este utilizată:

Rezultatul scriptului:

Șir (5) "Vasya" șir (0) ""

După cum puteți vedea, ieșirea PHP nu numai conținutul variabilei, ci și numărul de caractere și chiar tipul de variabilă (linia de șir). Tipuri de date Considerăm în detaliu în următoarele lecții.

Ștergeți variabilele

Puteți șterge o variabilă existentă utilizând funcția Unset ():

Și acum este timpul să practicăm puțin.

Amintiți-vă, aproape orice sarcină pe PHP poate avea mai multe soluții. Prin urmare, dacă soluțiile dvs. sunt diferite de scris pe acest site - acest lucru nu înseamnă deloc că ați făcut ceva greșit.

Scrieți un script care:
1. Creează variabile cu titluri și nume de conținut și unele valori.
2. Afișează valoarea variabilei din titlu în interiorul etichetei H1 și valoarea variabilei conținutului în cadrul etichetei DIV.

Arată o decizie

", $ Titlu","; Eco"

", Conținut $",
"; ?>

Vreau să vă atrag încă o dată atenția că această decizie nu este singura adevărată. De exemplu, următorul cod va duce la același rezultat:

Variabilele de mediu (medii) în Windows conțin diverse informații despre setările de sistem și despre mediul utilizator. Există variabile ale mediului, sistemelor și proceselor.

Cea mai ușoară modalitate de a vedea conținutul variabilelor de mediu în Windows - Deschideți proprietățile sistemului ( sysdm.cpl) -\u003e Avansat -\u003e Variabile de miercuri. După cum puteți vedea, există două secțiuni în secțiunile curente: în partea de sus există variabile ale mediului utilizatorului, în sistemul inferior - sistemic.

În plus, variabilele de mediu sunt stocate în registrul sistemului. Variabilele personalizate sunt stocate în secțiune. Sistem - B. HKLM \\ System \\ CurrentControlset \\ Control \\ Session Manager \\ Mediu.

Puteți retrage valorile tuturor variabilelor de mediu la promptul de comandă Windows. Echipa este simplă:

Comanda va afișa lista variabilelor de mediu și valorile acestora.

În PowerShell, pentru a afișa toate variabilele de mediu, puteți utiliza comanda:

Dacă doriți să afișați o singură variabilă, trebuie să utilizați comanda ECHO, iar numele variabilei trebuie încheiat cu semne de interes. De exemplu,

ECHO% SIDICROOT%

set\u003e C: \\ tmp \\ env_var.txt

Variabilele mediului unui proces specific pot fi obținute folosind gratuit procesare Explorer Utilities (de la sysinternale). Doar deschideți proprietățile procesului și accesați fila Mediu inconjurator.

Acum 13 ani.

Un pic Gotcha să aibă grijă de:

Dacă dezactivați registreleGlobale și legate, utilizați get_defined_vars (), este posibil să vedeți ceva de genul următor:

Array.
[Globals] \u003d\u003e matrice
[Globals] \u003d\u003e matrice
* Recursiune *
[_Post] \u003d\u003e matrice ()
[_GET] \u003d\u003e Array ()
[_Cookie] \u003d\u003e matrice ()
[_Files] \u003d\u003e matrice ()
)

[_Post] \u003d\u003e matrice ()
[_GET] \u003d\u003e Array ()
[_Cookie] \u003d\u003e matrice ()
[_Files] \u003d\u003e matrice ()

)
?>

Observați că $ _Server nu este "acolo

imprimare "

". HtmlSpecialChars (Print_R (get_defined_vars (), true))."
" ;
imprimare "
". HtmlSpecialChars (Print_R ($ _Server, TRUE))."
" ;
?>

Și apoi va apărea $ _Server în ambele liste. Cred că nu este într-adevăr o Gotcha, pentru că nu se va întâmpla nimic rău, dar este o curiozitate interesantă.

ACUM 6 ANI.

Deoarece get_defined_vars () primește numai variabilele la punctul în care apelați funcția, există o modalitate simplă de a obține variabilele definite în cadrul domeniului curent.

// În partea de sus a script-ului dvs. PHP
$ vars \u003d get_defined_vars ();

// Acum faceți lucrurile
$ foo \u003d "foo";
$ Bar \u003d "bar";

// Obțineți toate variabilele definite în domeniul de aplicare curent
$ Vars \u003d Array_diff (get_defined_vars (), $ vars);

echo "

"
;
print_r ($ Vars);
echo "
" ;
?>

ACUM 15 ANI.

Iată o funcție care generează un raport de debug pentru afișare sau e-mail
folosind get_defined_vars. Mare pentru obținerea unui snapshot detaliat
bazându-se pe intrarea utilizatorului.

funcția generatedEbugreport ($ Metode, $ definit_vars, $ email \u003d "nedefinit") (
// Funcția de a crea un raport de depanare pentru a afișa sau trimite un e-mail.
// Utilizare: generatebugreport (metoda, get_defined_vars (), e-mail);
// unde metoda este "browser" sau "e-mail".

// Creați o listă de ignorare pentru chei returnate de "get_defined_vars".
// de exemplu, http_post_vars, http_get_vars și altele
// redundant (la fel ca _post, _get)
// includ, de asemenea, versiunile pe care le doriți ignorate din motive de securitate - adică FPSESSID.
$ ignorelist \u003d matrice (http_post_vars "," http_get_vars ",
"Http_cookie_vars", "http_server_vars",
"Http_env_vars", "http_sesions_vars",
"_Env", "FPSessid", "Sess_dbuser",
"Sess_dbpass", "http_cookie");

$ timstamp \u003d data ("m / d / y h: m: s");
$ message \u003d "Raportul de depanare a creat $ timstamp \\ n";

// obține ultima eroare SQL pentru o măsură bună, unde $ link este identificatorul de resurse
// pentru mysql_connect. Comentarii sau modificați pentru baza de date sau a configurației de abstractizare.
link Global $;
$ Sql_error \u003d mysql_error ($ link);
dacă ($ sql_error) (
$ mesaj. \u003d "\\ nmysql Mesaje: \\ n". mysql_error ($ link);
}
// capăt mysql.

// ar putea folosi o funcție recursivă aici. Ai idee ;-)
foreach ($ definit_vars ca key $ \u003d\u003e $ val) (
Dacă (este_array ($ val) &&! In_array (key $, $ ignorelist) && conte ($ val)\u003e 0) (
$ Mesaj. \u003d "\\ N $ key matrice (cheie \u003d valoare): \\ n";
Foreach ($ val ca $ subky \u003d\u003e $ subval) (
Dacă (! In_array ($ Subcheie, $ ignorelist) && isi_array ($ subval)) (
$ Mesaj. \u003d $ Subcheie. "\u003d". $ subval. "\\ n";
}
Alseif (! In_array ($ Subchey, $ ignorelist) && is_array ($ subval)) (
Foreach ($ subval ca $ subsubkey \u003d\u003e $ subsubval) (
dacă (! in_array ($ subnaboy, $ ignorelist)) (
$ mesaj. \u003d $ SUSUGY. "\u003d". $ subsubval. "\\ n" ;
}
}
}
}
}
Altfel (!
is_array ($ val) &&! In_array (key $, $ ignorelist) && $ val) (
$ Mesaj. \u003d "\\ Nvariable". Tasta $. "\u003d". $ Val. "\\ n";
}
}

Dacă ($ metoda \u003d\u003d "browser") (
ECHO NL2BR (Mesaj $);
}
Altcinef ($ metoda \u003d\u003d "e-mail") (
dacă ($ email \u003d\u003d "nedefinit") (
$ email \u003d $ _Server ["server_admin"];
}

$ Mresult \u003d Mail ($ email, "Report Debug pentru". $ _Env ["Hostname"]. "", $ Mesaj);
Dacă ($ MRESULT \u003d\u003d 1) (
Ecou. "Raportul de depanare trimis cu succes. \\ N";
}
Altfel (
Ecou. "Nu a reușit să trimită Debug Reort. \\ N";
}
}
}
?>

Acum 17 ani.

Rutină simplă pentru a converti un obiect get_definat_vars la XML.

funcția OBJ2XML ($ V, $ liniuță \u003d "") (
În timp ce (lista (tasta $, $ val) \u003d fiecare ($ v)) (
dacă (tasta $ \u003d\u003d "__attr") Continuați;
// Verificați pentru __Attr
dacă (is_object ($ val -\u003e __Attr)) (
În timp ce (lista (tasta $2, $ VAL2) \u003d fiecare ($ val -\u003e __attr)) (
$ Attr \u003d "key2 \u003d \\" $ val2 \\ "";
}
}
Altceva $ attr \u003d "";
dacă (este_array ($ val) || is_object ($ val)) (
Imprimare ("$ liniuță< $key$attr >\\ n ");
obj2xml ($ val, $ liniuță. "");
Imprimare ("$ liniuță\\ n ");
}
Alte Print ("$ liniuță< $key$attr > $ val.\\ n ");
}
}

// obiect exemplu.
$ x -\u003e Nume -\u003e Primul \u003d "Ioan";
$ x -\u003e Nume -\u003e Ultimul \u003d "Smith";
$ x -\u003e arr ["fructe"] \u003d "bannana";
$ x -\u003e arr ["veg"] \u003d "morcov";
$ Y -\u003e client \u003d $ x;
$ Y -\u003e client -\u003e __attr -\u003e id \u003d "176C4";

$ z \u003d get_defined_vars ();
obj2xml ($ z ["y"]);
?>
va ieși:


Ioan.
Smith.


Bannana.
Morcov.

Acum 11 ani.

Ca notă, get_defined_vars () nu returnează un set de referințe variabile (așa cum speram). De exemplu:

// definește o variabilă
$ My_var \u003d "foo";

// Obțineți lista noastră de variabile definite
$ definet_vars \u003d get_defined_vars ();

Acum încercați să schimbați valoarea prin intermediul matricei returnate
$ definit_vars ["my_var"] \u003d "bar";

echo $ my_var, "\\ n";

?>

va ieși "foo" (valoarea inițială). Este frumos dacă get_defined_vars () a avut un argument opțional pentru a le face referiri, dar îmi imaginez o cerere destul de specializată. Puteți face-o singură (mai puțin convenabilă) cu ceva de genul:

$ definet_vars \u003d matrice ();
$ var_names \u003d array_keys (get_defined_vars ());

foreach ($ var_names ca $ var_name)
{
$ definit_vars [$ var_name] \u003d & $ var_name;
}

?>

1 an in urma.

Am postat aici înainte de "acest" fiind în get_definat_vars.

Se pare că nu este întotdeauna acolo, dar în cazurile CERTIAIN va apărea inexplicabil.

Php -r "
Testul de clasă (
Funcția publică a () (var_dump (array_keys (get_defined_vars ()); $ a \u003d 123;)
Funcția publică B () (var_dump (array_keys (get_defined_vars ()); $ acest;)
}
$ t \u003d noul test ();
$ T-\u003e a ();
$ T-\u003e b ();
"

Array ()
Array ("Acest")

Acest lucru nu se întâmplă în PHP 7.2, dar se va întâmpla în PHP 5.6.

1 an in urma.

Unele comentarii arată că această funcție nu va returna referințele. Cu toate acestea, numele și numele de întoarcere sunt "referințe".

Nu aș recomanda sugestiile aici care le convertesc la referințe.

Funcția publică x ($ a, $ b, $ c) (
Foreach (array_keys (get_defined_vars ()) ca cheie $)
Dacă (tasta $! \u003d\u003d "acest")
$ this-\u003e y ($ (key $));
}

Funcția publică y (& $ intrare) (
$ intrare ++;
}

În loc de $ () puteți utiliza, de asemenea, $$.

Am făcut niște lucruri dărâmate în timpul meu pentru a face un cod extrem de generic, dar nu a trebuit niciodată să fac nimic asemănător celor de mai sus. S-ar putea să nu funcționeze nici măcar (dar ar trebui să nu fie diferită de $ a [Key $]).

De asemenea, puteți face Key $$ ++ dar nu am văzut niciodată codul de genul ăsta care nu a fost "dinamic orientat nu este benefic).

Dacă faci ceva de genul ăsta, atunci dă-i o examinare suplimentară.

Acum 13 ani.

Un pic Gotcha să aibă grijă de:

Dacă dezactivați registreleGlobale și legate, utilizați get_defined_vars (), este posibil să vedeți ceva de genul următor:

Array.
[Globals] \u003d\u003e matrice
[Globals] \u003d\u003e matrice
* Recursiune *
[_Post] \u003d\u003e matrice ()
[_GET] \u003d\u003e Array ()
[_Cookie] \u003d\u003e matrice ()
[_Files] \u003d\u003e matrice ()
)

[_Post] \u003d\u003e matrice ()
[_GET] \u003d\u003e Array ()
[_Cookie] \u003d\u003e matrice ()
[_Files] \u003d\u003e matrice ()

)
?>

Observați că $ _Server nu este "acolo

imprimare "

". HtmlSpecialChars (Print_R (get_defined_vars (), true))."
" ;
imprimare "
". HtmlSpecialChars (Print_R ($ _Server, TRUE))."
" ;
?>

Și apoi va apărea $ _Server în ambele liste. Cred că nu este într-adevăr o Gotcha, pentru că nu se va întâmpla nimic rău, dar este o curiozitate interesantă.

ACUM 6 ANI.

Deoarece get_defined_vars () primește numai variabilele la punctul în care apelați funcția, există o modalitate simplă de a obține variabilele definite în cadrul domeniului curent.

// În partea de sus a script-ului dvs. PHP
$ vars \u003d get_defined_vars ();

// Acum faceți lucrurile
$ foo \u003d "foo";
$ Bar \u003d "bar";

// Obțineți toate variabilele definite în domeniul de aplicare curent
$ Vars \u003d Array_diff (get_defined_vars (), $ vars);

echo "

"
;
print_r ($ Vars);
echo "
" ;
?>

ACUM 15 ANI.

Iată o funcție care generează un raport de debug pentru afișare sau e-mail
folosind get_defined_vars. Mare pentru obținerea unui snapshot detaliat
bazându-se pe intrarea utilizatorului.

funcția generatedEbugreport ($ Metode, $ definit_vars, $ email \u003d "nedefinit") (
// Funcția de a crea un raport de depanare pentru a afișa sau trimite un e-mail.
// Utilizare: generatebugreport (metoda, get_defined_vars (), e-mail);
// unde metoda este "browser" sau "e-mail".

// Creați o listă de ignorare pentru chei returnate de "get_defined_vars".
// de exemplu, http_post_vars, http_get_vars și altele
// redundant (la fel ca _post, _get)
// includ, de asemenea, versiunile pe care le doriți ignorate din motive de securitate - adică FPSESSID.
$ ignorelist \u003d matrice (http_post_vars "," http_get_vars ",
"Http_cookie_vars", "http_server_vars",
"Http_env_vars", "http_sesions_vars",
"_Env", "FPSessid", "Sess_dbuser",
"Sess_dbpass", "http_cookie");

$ timstamp \u003d data ("m / d / y h: m: s");
$ message \u003d "Raportul de depanare a creat $ timstamp \\ n";

// obține ultima eroare SQL pentru o măsură bună, unde $ link este identificatorul de resurse
// pentru mysql_connect. Comentarii sau modificați pentru baza de date sau a configurației de abstractizare.
link Global $;
$ Sql_error \u003d mysql_error ($ link);
dacă ($ sql_error) (
$ mesaj. \u003d "\\ nmysql Mesaje: \\ n". mysql_error ($ link);
}
// capăt mysql.

// ar putea folosi o funcție recursivă aici. Ai idee ;-)
foreach ($ definit_vars ca key $ \u003d\u003e $ val) (
Dacă (este_array ($ val) &&! In_array (key $, $ ignorelist) && conte ($ val)\u003e 0) (
$ Mesaj. \u003d "\\ N $ key matrice (cheie \u003d valoare): \\ n";
Foreach ($ val ca $ subky \u003d\u003e $ subval) (
Dacă (! In_array ($ Subcheie, $ ignorelist) && isi_array ($ subval)) (
$ Mesaj. \u003d $ Subcheie. "\u003d". $ subval. "\\ n";
}
Alseif (! In_array ($ Subchey, $ ignorelist) && is_array ($ subval)) (
Foreach ($ subval ca $ subsubkey \u003d\u003e $ subsubval) (
dacă (! in_array ($ subnaboy, $ ignorelist)) (
$ mesaj. \u003d $ SUSUGY. "\u003d". $ subsubval. "\\ n" ;
}
}
}
}
}
Altfel (!
is_array ($ val) &&! In_array (key $, $ ignorelist) && $ val) (
$ Mesaj. \u003d "\\ Nvariable". Tasta $. "\u003d". $ Val. "\\ n";
}
}

Dacă ($ metoda \u003d\u003d "browser") (
ECHO NL2BR (Mesaj $);
}
Altcinef ($ metoda \u003d\u003d "e-mail") (
dacă ($ email \u003d\u003d "nedefinit") (
$ email \u003d $ _Server ["server_admin"];
}

$ Mresult \u003d Mail ($ email, "Report Debug pentru". $ _Env ["Hostname"]. "", $ Mesaj);
Dacă ($ MRESULT \u003d\u003d 1) (
Ecou. "Raportul de depanare trimis cu succes. \\ N";
}
Altfel (
Ecou. "Nu a reușit să trimită Debug Reort. \\ N";
}
}
}
?>

Acum 17 ani.

Rutină simplă pentru a converti un obiect get_definat_vars la XML.

funcția OBJ2XML ($ V, $ liniuță \u003d "") (
În timp ce (lista (tasta $, $ val) \u003d fiecare ($ v)) (
dacă (tasta $ \u003d\u003d "__attr") Continuați;
// Verificați pentru __Attr
dacă (is_object ($ val -\u003e __Attr)) (
În timp ce (lista (tasta $2, $ VAL2) \u003d fiecare ($ val -\u003e __attr)) (
$ Attr \u003d "key2 \u003d \\" $ val2 \\ "";
}
}
Altceva $ attr \u003d "";
dacă (este_array ($ val) || is_object ($ val)) (
Imprimare ("$ liniuță< $key$attr >\\ n ");
obj2xml ($ val, $ liniuță. "");
Imprimare ("$ liniuță\\ n ");
}
Alte Print ("$ liniuță< $key$attr > $ val.\\ n ");
}
}

// obiect exemplu.
$ x -\u003e Nume -\u003e Primul \u003d "Ioan";
$ x -\u003e Nume -\u003e Ultimul \u003d "Smith";
$ x -\u003e arr ["fructe"] \u003d "bannana";
$ x -\u003e arr ["veg"] \u003d "morcov";
$ Y -\u003e client \u003d $ x;
$ Y -\u003e client -\u003e __attr -\u003e id \u003d "176C4";

$ z \u003d get_defined_vars ();
obj2xml ($ z ["y"]);
?>
va ieși:


Ioan.
Smith.


Bannana.
Morcov.

Acum 11 ani.

Ca notă, get_defined_vars () nu returnează un set de referințe variabile (așa cum speram). De exemplu:

// definește o variabilă
$ My_var \u003d "foo";

// Obțineți lista noastră de variabile definite
$ definet_vars \u003d get_defined_vars ();

Acum încercați să schimbați valoarea prin intermediul matricei returnate
$ definit_vars ["my_var"] \u003d "bar";

echo $ my_var, "\\ n";

?>

va ieși "foo" (valoarea inițială). Este frumos dacă get_defined_vars () a avut un argument opțional pentru a le face referiri, dar îmi imaginez o cerere destul de specializată. Puteți face-o singură (mai puțin convenabilă) cu ceva de genul:

$ definet_vars \u003d matrice ();
$ var_names \u003d array_keys (get_defined_vars ());

foreach ($ var_names ca $ var_name)
{
$ definit_vars [$ var_name] \u003d & $ var_name;
}

?>

1 an in urma.

Am postat aici înainte de "acest" fiind în get_definat_vars.

Se pare că nu este întotdeauna acolo, dar în cazurile CERTIAIN va apărea inexplicabil.

Php -r "
Testul de clasă (
Funcția publică a () (var_dump (array_keys (get_defined_vars ()); $ a \u003d 123;)
Funcția publică B () (var_dump (array_keys (get_defined_vars ()); $ acest;)
}
$ t \u003d noul test ();
$ T-\u003e a ();
$ T-\u003e b ();
"

Array ()
Array ("Acest")

Acest lucru nu se întâmplă în PHP 7.2, dar se va întâmpla în PHP 5.6.

1 an in urma.

Unele comentarii arată că această funcție nu va returna referințele. Cu toate acestea, numele și numele de întoarcere sunt "referințe".

Nu aș recomanda sugestiile aici care le convertesc la referințe.

Funcția publică x ($ a, $ b, $ c) (
Foreach (array_keys (get_defined_vars ()) ca cheie $)
Dacă (tasta $! \u003d\u003d "acest")
$ this-\u003e y ($ (key $));
}

Funcția publică y (& $ intrare) (
$ intrare ++;
}

În loc de $ () puteți utiliza, de asemenea, $$.

Am făcut niște lucruri dărâmate în timpul meu pentru a face un cod extrem de generic, dar nu a trebuit niciodată să fac nimic asemănător celor de mai sus. S-ar putea să nu funcționeze nici măcar (dar ar trebui să nu fie diferită de $ a [Key $]).

De asemenea, puteți face Key $$ ++ dar nu am văzut niciodată codul de genul ăsta care nu a fost "dinamic orientat nu este benefic).

Dacă faci ceva de genul ăsta, atunci dă-i o examinare suplimentară.