Variablat në PHP. Variablat në PHP Php hedhin të gjitha ndryshoret e postimit

Variablat e mjedisit (ambienti) në Windows përmbajnë informacione të ndryshme në lidhje me cilësimet e sistemit dhe mjedisin e përdoruesit. Bëni dallimin midis variablave të përdoruesit, sistemit dhe mjedisit të procesit.

Mënyra më e lehtë për të parë përmbajtjen e variablave të mjedisit në Windows është hapja e vetive të sistemit ( sysdm.cpl) -\u003e Avancuar -\u003e Variablat e mjedisit. Siç mund ta shihni, në seksionin e hapur ekzistojnë dy seksione: e sipërmja përmban variablat e mjedisit të përdoruesit, e poshtmja përmban ato të sistemit.

Për më tepër, variablat e mjedisit ruhen në regjistrin e sistemit. Variablat e personalizuar ruhen në seksion. Sistemi - në HKLM \\ SISTEMI \\ CurrentControlSet \\ Kontrolli \\ Menaxheri i Sesionit \\ Mjedisi.

Ju mund të shfaqni vlerat e të gjitha variablave të mjedisit në vijën e komandave Windows. Komanda është e thjeshtë:

Komanda do të rendisë variablat e mjedisit dhe vlerat e tyre.

Në PowerShell, mund të përdorni komandën për të shfaqur të gjitha ndryshoret e mjedisit:

Nëse dëshironi të shfaqni vlerën e vetëm një ndryshore, duhet të përdorni komandën echo dhe emri i ndryshores duhet të mbyllet në shenjat e përqindjes. Për shembull,

Echo% systemroot%

vendosur\u003e c: \\ tmp \\ env_var.txt

Variablat mjedisorë të një procesi specifik mund të merren duke përdorur falas shërbimet e procesit Explorer (nga Sysinternals). Mjafton të hapni vetitë e procesit dhe të shkoni në skedinë Mjedisi.

13 vjet më parë

Një gotë e vogël për të parë:

Nëse çaktivizoni RegisterGlobals dhe të ngjashme, atëherë përdorni get_defined_vars (), mund të shihni diçka si më poshtë:

Array
[GLOBALS] \u003d\u003e Varg
[GLOBALS] \u003d\u003e Varg
* RECURSION *
[_POST] \u003d\u003e Array ()
[_GET] \u003d\u003e Array ()
[_COOKIE] \u003d\u003e Array ()
[_FILES] \u003d\u003e Array ()
)

[_POST] \u003d\u003e Array ()
[_GET] \u003d\u003e Array ()
[_COOKIE] \u003d\u003e Array ()
[_FILES] \u003d\u003e Array ()

)
?>

Vini re që $ _SERVER nuk është atje. Duket se php ngarkon superglobal $ _SERVER nëse përdoret diku. Mund ta bëni këtë:

shtyp "

". karakteret speciale html (print_r (get_defined_vars (), e vërtetë))."
" ;
shtyp "
". html speciale (të shtypura_r ($ _SERVER, e vërtetë))."
" ;
?>

Dhe atëherë $ _SERVER do të shfaqet në të dy listat. Unë mendoj se nuk është me të vërtetë një gotë, sepse asgjë e keqe nuk do të ndodhë në asnjë mënyrë, por sidoqoftë është një kuriozitet interesant.

6 vjet më parë

Meqenëse get_defined_vars () merr vetëm ndryshoret në pikën që ju e quani funksionin, ekziston një mënyrë e thjeshtë për të marrë variablat e përcaktuar brenda fushës aktuale.

// Maja e skenarit tuaj php
$ vars \u003d get_defined_vars ();

// Tani bëj gjërat e tua
$ foo \u003d "foo";
$ bar \u003d "shirit";

// Merrni të gjitha ndryshoret e përcaktuara në fushën aktuale
$ vars \u003d varg_diff (get_defined_vars (), $ vars);

jehonë "

"
;
print_r ($ vars);
jehonë "
" ;
?>

15 vjet më parë

Këtu është një funksion i cili gjeneron një raport korrigjimi për shfaqje ose email
duke përdorur get_defined_vars. E shkëlqyeshme për marrjen e një fotografie të detajuar pa
duke u mbështetur në hyrjen e përdoruesit.

funksioni gjeneronDebugReport ($ metodë, $ përcaktuar_vars, $ email \u003d "i papërcaktuar") (
// Funksioni për të krijuar një raport korrigjimi për të shfaqur ose dërguar me email.
// Përdorimi: generateDebugReport (metoda, get_defined_vars (), email);
// Ku metoda është "shfletuesi" ose "email".

// Krijoni një listë injorimi për çelësat e kthyer nga "get_defined_vars".
// Për shembull, HTTP_POST_VARS, HTTP_GET_VARS dhe të tjerët janë
// e tepërt (e njëjtë me _POST, _GET)
// Gjithashtu përfshini vars që dëshironi të injorohen për arsye sigurie - d.m.th. PHPSESSID.
$ injorelist \u003d array ("HTTP_POST_VARS", "HTTP_GET_VARS",
"HTTP_COOKIE_VARS", "HTTP_SERVER_VARS",
"HTTP_ENV_VARS", "HTTP_SESSION_VARS",
"_ENV", "PHPSESSID", "SESS_DBUSER",
"SESS_DBPASS", "HTTP_COOKIE");

$ timestamp \u003d data ("m / d / y h: m: s");
$ message \u003d "Raporti i korrigjimit të gabimeve krijoi $ timestamp \\ n";

// Merrni gabimin e fundit SQL për masë të mirë, ku $ link është identifikuesi i burimit
// për mysql_connect. Komentoni ose modifikoni për bazën tuaj të të dhënave ose konfigurimin e abstraksionit.
lidhja globale $;
$ sql_error \u003d mysql_error ($ link);
nëse ($ sql_error) (
$ message. \u003d "\\ n Mesazhet MySQL: \\ n". mysql_error ($ link);
}
// Fund MySQL

// Mund të përdorë një funksion rekursiv këtu. Ju merrni idenë ;-)
foreach ($ përcaktuar_vars si $ kyç \u003d\u003e $ val) (
nëse (is_array ($ val) &&! in_array ($ çelës, $ injoroj listën) && numëroni ($ val)\u003e 0) (
$ mesazh. \u003d "\\ n $ varg çelësash (çelësi \u003d vlera): \\ n";
foreach ($ val si $ subkey \u003d\u003e $ subval) (
nëse (! in_array ($ nënçelës, $ injorues) &&! është_array ($ nënvalë)) (
$ mesazh. \u003d $ nënçelës. "\u003d". $ subval. "\\ n";
}
otherif (! në_array ($ nënçelës, $ injorues) && është_array ($ nënvalë)) (
foreach ($ subval si $ subsubkey \u003d\u003e $ subsubval) ()
në qoftë se (! in_array ($ nën-çelësi, $ injoroj listën)) (
$ mesazh. \u003d $ nën-çelës. "\u003d". $ nën nënvlerësim. "\\ n" ;
}
}
}
}
}
tjeter nese (!
is_array ($ val) &&! in_array ($ çelës, $ injorues) && $ val) (
$ mesazh. \u003d "\\ nTë ndryshueshëm". çelësi $ "\u003d". $ val "\\ n";
}
}

Nëse ($ method \u003d\u003d "shfletuesi") (
echo nl2br ($ mesazh);
}
elseif ($ method \u003d\u003d "email") (
nëse ($ email \u003d\u003d "i papërcaktuar") (
$ email \u003d $ _SERVER ["SERVER_ADMIN"];
}

$ mresult \u003d mail ($ email, "Raporti i korrigjimit të gabimeve për". $ _ENV ["HOSTNAME"]. "" ", $ mesazh);
nëse ($ mresult \u003d\u003d 1) (
jehonë "Raporti i korrigjimit të gabimeve u dërgua me sukses. \\ N";
}
tjetër (
jehonë "Dështoi në dërgimin e raportit të korrigjimit. \\ N";
}
}
}
?>

17 vjet më parë

Rutinë e thjeshtë për të kthyer një objekt get_defined_vars në XML.

funksioni obj2xml ($ v, $ indent \u003d "") (
ndërsa (lista ($ çelësi, $ val) \u003d secila ($ v)) (
nëse ($ kyç \u003d\u003d "__attr") vazhdoni;
// Kontrolloni për __attr
nëse (is_object ($ val -\u003e __attr)) ()
ndërsa (lista ($ key2, $ val2) \u003d secila ($ val -\u003e __attr)) (
$ attr. \u003d "$ key2 \u003d \\" $ val2 \\ "";
}
}
përndryshe $ attr \u003d "";
nëse (është_array ($ val) || është_objekt ($ val)) (
shtyp ("$ indent< $key$attr >\\ n ");
obj2xml ($ val, $ indent. "");
shtyp ("$ indent\\ n ");
}
shtyp tjetër ("$ indent< $key$attr > $ val\\ n ");
}
}

// Shembull objekt
$ x -\u003e emri -\u003e i pari \u003d "Gjoni";
$ x -\u003e emri -\u003e i fundit \u003d "Smith";
$ x -\u003e arr ["Fruta"] \u003d "Banane";
$ x -\u003e arr ["Veg"] \u003d "Karrota";
$ y -\u003e konsumator \u003d $ x;
$ y -\u003e klient -\u003e __attr -\u003e id \u003d "176C4";

$ z \u003d get_defined_vars ();
obj2xml ($ z ["y"]);
?>
do të dalë:


Gjoni
Smith


Banane
Karrota

11 vjet më parë

Si shënim, get_defined_vars () nuk kthen një sërë referencash të ndryshueshme (siç shpresoja). Për shembull:

// përcaktoni një ndryshore
$ my_var \u003d "foo";

// merrni listën tonë të variablave të përcaktuar
$ përcaktuar_vars \u003d get_defined_vars ();

// tani përpiquni të ndryshoni vlerën përmes vargut të kthyer
$ përcaktuar_vars ["my_var"] \u003d "shirit";

jehonë $ my_var, "\\ n";

?>

do të nxjerrë "foo" (vlera origjinale). "Do të ishte mirë nëse get_defined_vars () do të kishte një argument opsional për t'i bërë ato referenca, por unë imagjinoj se është një kërkesë mjaft e specializuar. Mund ta bëni vetë (më pak lehtësisht) me diçka si:

$ përcaktuar_vars \u003d varg ();
$ var_names \u003d array_keys (get_defined_vars ());

foreach ($ var_names si $ var_name)
{
$ përcaktuar_vars [$ var_name] \u003d & $ $ var_name;
}

?>

1 vit më parë

Kam postuar këtu më parë në lidhje me "këtë" që është në get_defined_vars.

Rezulton se nuk është gjithmonë aty, por në raste të caktuara do të shfaqet në mënyrë të pashpjegueshme.

Php -r "
Testi i klasës (
funksioni publik a () (var_dump (array_keys (get_defined_vars ()))); $ a \u003d 123;)
funksioni publik b () (var_dump (array_keys (get_defined_vars ()))); $ kjo;)
}
$ t \u003d Test i ri ();
$ t-\u003e a ();
$ t-\u003e b ();
"

Array ()
grup ("ky")

Kjo nuk ndodh në PHP 7.2 por do të ndodhë në PHP 5.6.

1 vit më parë

Disa komente këtu tregojnë se ky funksion nuk i kthen referencat. Sidoqoftë, emrat e kthimit dhe emrat janë "referenca".

Unë nuk do të rekomandoja sugjerimet këtu që e shndërrojnë atë në referenca.

Funksioni publik x ($ a, $ b, $ c) (
foreach (array_keys (get_defined_vars ()) si çelës $)
nëse (çelësi $! \u003d\u003d "ky")
$ kjo-\u003e y ($ ($ çelësi));
}

Funksioni publik y (& $ input) (
$ input ++;
}

Në vend të $ () ju gjithashtu mund të përdorni $ $.

Unë kam bërë disa gjëra të bezdisshme në kohën time për të bërë një kod jashtëzakonisht të përgjithshëm, por unë kurrë nuk kam pasur nevojë të bëj diçka si më sipër. Mund të mos funksionojë as (por nuk duhet të funksionojë nga $ a [$ kyç]).

Ju gjithashtu mund të bëni $ $ tast ++ por unë kurrë nuk kam parë një kod si ai që nuk ishte "keq" (duke përdorur dinamikë ku dinamika nuk është e dobishme).

Nëse jeni duke bërë diçka të tillë, atëherë jepni një vëzhgim shtesë.

13 vjet më parë

Një gotë e vogël për të parë:

Nëse çaktivizoni RegisterGlobals dhe të ngjashme, atëherë përdorni get_defined_vars (), mund të shihni diçka si më poshtë:

Array
[GLOBALS] \u003d\u003e Varg
[GLOBALS] \u003d\u003e Varg
* RECURSION *
[_POST] \u003d\u003e Array ()
[_GET] \u003d\u003e Array ()
[_COOKIE] \u003d\u003e Array ()
[_FILES] \u003d\u003e Array ()
)

[_POST] \u003d\u003e Array ()
[_GET] \u003d\u003e Array ()
[_COOKIE] \u003d\u003e Array ()
[_FILES] \u003d\u003e Array ()

)
?>

Vini re që $ _SERVER nuk është atje. Duket se php ngarkon superglobal $ _SERVER nëse përdoret diku. Mund ta bëni këtë:

shtyp "

". karakteret speciale html (print_r (get_defined_vars (), e vërtetë))."
" ;
shtyp "
". html speciale (të shtypura_r ($ _SERVER, e vërtetë))."
" ;
?>

Dhe atëherë $ _SERVER do të shfaqet në të dy listat. Unë mendoj se nuk është me të vërtetë një gotë, sepse asgjë e keqe nuk do të ndodhë në asnjë mënyrë, por sidoqoftë është një kuriozitet interesant.

6 vjet më parë

Meqenëse get_defined_vars () merr vetëm ndryshoret në pikën që ju e quani funksionin, ekziston një mënyrë e thjeshtë për të marrë variablat e përcaktuar brenda fushës aktuale.

// Maja e skenarit tuaj php
$ vars \u003d get_defined_vars ();

// Tani bëj gjërat e tua
$ foo \u003d "foo";
$ bar \u003d "shirit";

// Merrni të gjitha ndryshoret e përcaktuara në fushën aktuale
$ vars \u003d varg_diff (get_defined_vars (), $ vars);

jehonë "

"
;
print_r ($ vars);
jehonë "
" ;
?>

15 vjet më parë

Këtu është një funksion i cili gjeneron një raport korrigjimi për shfaqje ose email
duke përdorur get_defined_vars. E shkëlqyeshme për marrjen e një fotografie të detajuar pa
duke u mbështetur në hyrjen e përdoruesit.

funksioni gjeneronDebugReport ($ metodë, $ përcaktuar_vars, $ email \u003d "i papërcaktuar") (
// Funksioni për të krijuar një raport korrigjimi për të shfaqur ose dërguar me email.
// Përdorimi: generateDebugReport (metoda, get_defined_vars (), email);
// Ku metoda është "shfletuesi" ose "email".

// Krijoni një listë injorimi për çelësat e kthyer nga "get_defined_vars".
// Për shembull, HTTP_POST_VARS, HTTP_GET_VARS dhe të tjerët janë
// e tepërt (e njëjtë me _POST, _GET)
// Gjithashtu përfshini vars që dëshironi të injorohen për arsye sigurie - d.m.th. PHPSESSID.
$ injorelist \u003d array ("HTTP_POST_VARS", "HTTP_GET_VARS",
"HTTP_COOKIE_VARS", "HTTP_SERVER_VARS",
"HTTP_ENV_VARS", "HTTP_SESSION_VARS",
"_ENV", "PHPSESSID", "SESS_DBUSER",
"SESS_DBPASS", "HTTP_COOKIE");

$ timestamp \u003d data ("m / d / y h: m: s");
$ message \u003d "Raporti i korrigjimit të gabimeve krijoi $ timestamp \\ n";

// Merrni gabimin e fundit SQL për masë të mirë, ku $ link është identifikuesi i burimit
// për mysql_connect. Komentoni ose modifikoni për bazën tuaj të të dhënave ose konfigurimin e abstraksionit.
lidhja globale $;
$ sql_error \u003d mysql_error ($ link);
nëse ($ sql_error) (
$ message. \u003d "\\ n Mesazhet MySQL: \\ n". mysql_error ($ link);
}
// Fund MySQL

// Mund të përdorë një funksion rekursiv këtu. Ju merrni idenë ;-)
foreach ($ përcaktuar_vars si $ kyç \u003d\u003e $ val) (
nëse (is_array ($ val) &&! in_array ($ çelës, $ injoroj listën) && numëroni ($ val)\u003e 0) (
$ mesazh. \u003d "\\ n $ varg çelësash (çelësi \u003d vlera): \\ n";
foreach ($ val si $ subkey \u003d\u003e $ subval) (
nëse (! in_array ($ nënçelës, $ injorues) &&! është_array ($ nënvalë)) (
$ mesazh. \u003d $ nënçelës. "\u003d". $ subval. "\\ n";
}
otherif (! në_array ($ nënçelës, $ injorues) && është_array ($ nënvalë)) (
foreach ($ subval si $ subsubkey \u003d\u003e $ subsubval) ()
në qoftë se (! in_array ($ nën-çelësi, $ injoroj listën)) (
$ mesazh. \u003d $ nën-çelës. "\u003d". $ nën nënvlerësim. "\\ n" ;
}
}
}
}
}
tjeter nese (!
is_array ($ val) &&! in_array ($ çelës, $ injorues) && $ val) (
$ mesazh. \u003d "\\ nTë ndryshueshëm". çelësi $ "\u003d". $ val "\\ n";
}
}

Nëse ($ method \u003d\u003d "shfletuesi") (
echo nl2br ($ mesazh);
}
elseif ($ method \u003d\u003d "email") (
nëse ($ email \u003d\u003d "i papërcaktuar") (
$ email \u003d $ _SERVER ["SERVER_ADMIN"];
}

$ mresult \u003d mail ($ email, "Raporti i korrigjimit të gabimeve për". $ _ENV ["HOSTNAME"]. "" ", $ mesazh);
nëse ($ mresult \u003d\u003d 1) (
jehonë "Raporti i korrigjimit të gabimeve u dërgua me sukses. \\ N";
}
tjetër (
jehonë "Dështoi në dërgimin e raportit të korrigjimit. \\ N";
}
}
}
?>

17 vjet më parë

Rutinë e thjeshtë për të kthyer një objekt get_defined_vars në XML.

funksioni obj2xml ($ v, $ indent \u003d "") (
ndërsa (lista ($ çelësi, $ val) \u003d secila ($ v)) (
nëse ($ kyç \u003d\u003d "__attr") vazhdoni;
// Kontrolloni për __attr
nëse (is_object ($ val -\u003e __attr)) ()
ndërsa (lista ($ key2, $ val2) \u003d secila ($ val -\u003e __attr)) (
$ attr. \u003d "$ key2 \u003d \\" $ val2 \\ "";
}
}
përndryshe $ attr \u003d "";
nëse (është_array ($ val) || është_objekt ($ val)) (
shtyp ("$ indent< $key$attr >\\ n ");
obj2xml ($ val, $ indent. "");
shtyp ("$ indent\\ n ");
}
shtyp tjetër ("$ indent< $key$attr > $ val\\ n ");
}
}

// Shembull objekt
$ x -\u003e emri -\u003e i pari \u003d "Gjoni";
$ x -\u003e emri -\u003e i fundit \u003d "Smith";
$ x -\u003e arr ["Fruta"] \u003d "Banane";
$ x -\u003e arr ["Veg"] \u003d "Karrota";
$ y -\u003e konsumator \u003d $ x;
$ y -\u003e klient -\u003e __attr -\u003e id \u003d "176C4";

$ z \u003d get_defined_vars ();
obj2xml ($ z ["y"]);
?>
do të dalë:


Gjoni
Smith


Banane
Karrota

11 vjet më parë

Si shënim, get_defined_vars () nuk kthen një sërë referencash të ndryshueshme (siç shpresoja). Për shembull:

// përcaktoni një ndryshore
$ my_var \u003d "foo";

// merrni listën tonë të variablave të përcaktuar
$ përcaktuar_vars \u003d get_defined_vars ();

// tani përpiquni të ndryshoni vlerën përmes vargut të kthyer
$ përcaktuar_vars ["my_var"] \u003d "shirit";

jehonë $ my_var, "\\ n";

?>

do të nxjerrë "foo" (vlera origjinale). "Do të ishte mirë nëse get_defined_vars () do të kishte një argument opsional për t'i bërë ato referenca, por unë imagjinoj se është një kërkesë mjaft e specializuar. Mund ta bëni vetë (më pak lehtësisht) me diçka si:

$ përcaktuar_vars \u003d varg ();
$ var_names \u003d array_keys (get_defined_vars ());

foreach ($ var_names si $ var_name)
{
$ përcaktuar_vars [$ var_name] \u003d & $ $ var_name;
}

?>

1 vit më parë

Kam postuar këtu më parë në lidhje me "këtë" që është në get_defined_vars.

Rezulton se nuk është gjithmonë aty, por në raste të caktuara do të shfaqet në mënyrë të pashpjegueshme.

Php -r "
Testi i klasës (
funksioni publik a () (var_dump (array_keys (get_defined_vars ()))); $ a \u003d 123;)
funksioni publik b () (var_dump (array_keys (get_defined_vars ()))); $ kjo;)
}
$ t \u003d Test i ri ();
$ t-\u003e a ();
$ t-\u003e b ();
"

Array ()
grup ("ky")

Kjo nuk ndodh në PHP 7.2 por do të ndodhë në PHP 5.6.

1 vit më parë

Disa komente këtu tregojnë se ky funksion nuk i kthen referencat. Sidoqoftë, emrat e kthimit dhe emrat janë "referenca".

Unë nuk do të rekomandoja sugjerimet këtu që e shndërrojnë atë në referenca.

Funksioni publik x ($ a, $ b, $ c) (
foreach (array_keys (get_defined_vars ()) si çelës $)
nëse (çelësi $! \u003d\u003d "ky")
$ kjo-\u003e y ($ ($ çelësi));
}

Funksioni publik y (& $ input) (
$ input ++;
}

Në vend të $ () ju gjithashtu mund të përdorni $ $.

Unë kam bërë disa gjëra të bezdisshme në kohën time për të bërë një kod jashtëzakonisht të përgjithshëm, por unë kurrë nuk kam pasur nevojë të bëj diçka si më sipër. Mund të mos funksionojë as (por nuk duhet të funksionojë nga $ a [$ kyç]).

Ju gjithashtu mund të bëni $ $ tast ++ por unë kurrë nuk kam parë një kod si ai që nuk ishte "keq" (duke përdorur dinamikë ku dinamika nuk është e dobishme).

Nëse jeni duke bërë diçka të tillë, atëherë jepni një vëzhgim shtesë.

Me siguri keni një dollap ose sirtar në shtëpi. Parimi i përdorimit të tyre është i thjeshtë: ne vendosim gjëra që nuk na duhen tani, por mund të jenë të nevojshme pas një kohe.

Variablat funksionojnë në të njëjtën mënyrë. Ju mund të vendosni një vlerë në to dhe të ruani atje derisa të keni nevojë për të.

Krijimi i Variablave

Ju mund të vendosni një vlerë në një ndryshore si më poshtë:

Në kodin e mësipërm, ne krijuam ndryshoren $ name dhe vendosëm vlerën e Ivanit, pastaj krijuam variablin $ age dhe i caktuam vlerën 20.

Emri "ndryshore" do të thotë që vlera e tij mund të ndryshojë gjatë ekzekutimit të skenarit:

Në disa gjuhë, një ndryshore duhet së pari të "deklarohet" dhe pastaj të përdoret. Nuk ka deklarim në PHP - një variabël krijohet në momentin që vendosni një vlerë në të.
Sidoqoftë, programuesit PHP shpesh thonë "deklaroni variablin" në vend të "krijoni ndryshoren".

Gjithashtu, në vend që të "vendosin një vlerë në një ndryshore", ata shpesh thonë "cakto një vlerë".
Arsyeja është e thjeshtë - simboli \u003d, falë të cilit ruajmë një vlerë në një ndryshore, quhet "operator caktimi". Prandaj termi "i përshtatshëm".

Rregullat e ndryshueshme të emërtimit

1. Emri i ndryshueshëm fillon me simbolin $.

2. Karakteri i dytë mund të jetë një shkronjë ose një nënvizim _

Emrat e ndryshueshëm janë të ndjeshëm ndaj shkronjave të mëdha. $ name dhe $ Name janë variabla të ndryshëm.

Shfaqja e vlerës së një ndryshoreje në ekran

Ju mund të shfaqni një ndryshore duke përdorur komandën echo që ne tashmë e dimë:

Komanda echo ju lejon të shfaqni shumë vlera në të njëjtën kohë:

Vini re se kemi kaluar 2 vlera në jehonë, të ndara me presje. Kështu që ne mund të transferojmë sa më shumë vlera që duam. Dy shembujt e mëposhtëm do të japin të njëjtin rezultat:

Ekziston edhe një sintaksë stenografie për nxjerrjen e ndryshoreve në PHP. Në vend të kësaj

Para PHP 5.4, sintaksa e stenografisë funksiononte vetëm kur direktiva short_open_tag ishte aktivizuar në cilësimet e PHP, e cila gjithashtu lejon përdorimin e etiketës së hapjes së stenografisë

Kontrollimi i vlerës së një ndryshoreje

Komanda echo nuk është gjithmonë e përshtatshme për të kontrolluar vlerën aktuale të një ndryshoreje. Për shembull, nëse përpiqeni të shfaqni një varg bosh, "" asgjë nuk do të shfaqet në ekran. Dhe nuk është e qartë se cila është arsyeja - një ndryshore boshe ose një kod jo-punues.

Prandaj, funksioni var_dump () përdoret për të kontrolluar vlerën e një ndryshoreje:

Rezultati i ekzekutimit të skenarit:

Vargu (5) Vargu "Vasya" (0) ""

Siç mund ta shihni, PHP shfaq jo vetëm përmbajtjen e ndryshores, por edhe numrin e karaktereve, madje edhe llojin e ndryshores (vargut). Ne do të shohim nga afër llojet e të dhënave në mësimet e ardhshme.

Fshirja e Variablave

Mund të fshini një ndryshore ekzistuese duke përdorur funksionin unset ():

Tani është koha për të praktikuar pak.

Mos harroni, pothuajse çdo detyrë PHP mund të ketë zgjidhje të shumta. Prandaj, nëse vendimet tuaja ndryshojnë nga ato të shkruara në këtë faqe, kjo nuk do të thotë aspak se keni bërë diçka të gabuar.

Shkruaj një skenar që:
1. Krijon variabla me titullin dhe përmbajtjen e titujve dhe disa vlera.
2. Nxjerr vlerën e ndryshores së titullit brenda etiketës h1, dhe vlerën e ndryshores së përmbajtjes brenda etiketës div.

Trego zgjidhjen

", $ title,""; jehona"

", $ përmbajtje,"
"; ?>

Dëshiroj të tërheq vëmendjen tuaj edhe një herë se ky vendim nuk është i vetmi vendim i saktë. Për shembull, kodi i mëposhtëm do të prodhojë të njëjtin rezultat:

Ky mësim eksploron fushën e ndryshoreve PHP. Shpjegon ndryshimin midis sferave lokale dhe globale, tregon se si të hyni në variablat globale brenda një funksioni, si të punoni me superglobalet dhe si të krijoni variabla statik.

Kur filloni të mësoni PHP dhe filloni të punoni me funksione dhe objekte, fusha e ndryshoreve është paksa konfuze. Për fat të mirë, rregullat e PHP në këtë drejtim janë shumë të lehta për tu kuptuar (krahasuar me gjuhët e tjera të programimit).

Çfarë është fushëveprimi?

Shtrirja e ndryshueshme është konteksti brenda të cilit është përcaktuar një variabël dhe ku mund të arrihet. PHP ka dy sfera të ndryshueshme:

  • Globale - variablat mund të arrihen kudo në skenar
  • Lokal - variablat mund të arrihen vetëm brenda funksionit në të cilin janë përcaktuar

Shtrirja e ndryshueshme, dhe veçanërisht sfera lokale, lehtëson shumë menaxhimin e kodit. Nëse të gjitha variablat do të ishin globale, atëherë ato mund të ndryshohen kudo në skenar. Kjo do të çonte në kaos dhe shkrime të mëdha, pasi që shumë shpesh pjesë të ndryshme të skenarit përdorin variabla me të njëjtin emër. Duke përdorur kontekstin lokal, ju përcaktoni kufijtë e kodit që mund të hyjnë në variabël, duke e bërë kodin më të fuqishëm, modular dhe më të lehtë për të korrigjuar gabimet.

Variablat që janë të vlerësuara në shkallë globale quhen globale, dhe ato që janë të vlerësuara në nivel lokal quhen lokale.

Këtu keni një shembull se si funksionojnë variablat globale dhe lokale.

";) sayHello (); echo" Vlera \\ $ globalName: "$ $ GlobalName"
"; echo" Vlera \\ $ localName: "$ $ localName"
"; ?>

Përshëndetje Harry! Vlera $ GlobalName: "Zoe" $ localName vlera: ""

Në këtë skenar, ne kemi krijuar dy variabla:

  • Emri $ global - kjo është globale e ndryshueshme
  • $ localName - kjo është lokal një variabël që krijohet brenda funksionit sayHello ().

Pasi të krijohet variabla dhe funksioni, skenari thërret sayHello (), i cili nxjerr "Hello Harry!" ... Skripti pastaj përpiqet të shtypë vlerat e dy ndryshoreve duke përdorur funksionin echo. Ja çfarë po ndodh:

  • Sepse Emri $ global është krijuar jashtë funksionit, është i disponueshëm kudo në skenar, kështu që shfaqet "Zoya".
  • $ localName do të jetë në dispozicion vetëm brenda funksionit sayHello (). Meqenëse shprehja e ekos është jashtë funksionit, PHP nuk lejon hyrjen në ndryshoren lokale. Në vend të kësaj, PHP supozon se kodi do të krijojë një ndryshore të re me emrin $ localName që do të marrë një vlerë të paracaktuar të një vargu bosh. kjo është arsyeja pse thirrja e dytë për të bërë jehonë nxjerr vlerën "" për ndryshoren $ localName.

Përdorimi i ndryshoreve globale brenda një funksioni

Për të hyrë në një ndryshore globale jashtë funksionit thjesht shkruaj emrin e saj. Por për të hyrë në ndryshoren globale funksioni i brendshëm, së pari duhet të deklaroni ndryshoren si globale në funksion duke përdorur fjalën kyçe globale:

Funksioni myFunction () (globale $ globaleVariable; // Qasja në ndryshoren globale $ globaleVariable)

Nëse jo, PHP supozon se po krijoni ose përdorni një ndryshore lokale.

Këtu është një shembull i skriptit që përdor një ndryshore globale brenda një funksioni:

"; global $ globalName; echo" Përshëndetje $ globalName!
";) sayHello ();?\u003e

Kur ekzekutohet, skenari do të dalë:

Përshëndetje Harry! Përshëndetje Zoya!

Funksioni sayHello () përdor fjalën kyçe globale për të deklaruar variablin $ globalName si globale. Pastaj ajo mund të hyjë në variabël dhe të shfaqë vlerën e saj ("Zoe").

Çfarë janë superglobalet?

PHP ka një grup të veçantë të vargjeve globale të paracaktuara që përmbajnë informacione të ndryshme. Vargje të tilla quhen superglobale, meqenëse ato janë të arritshme nga kudo në skenar, përfshirë hapësirën e funksionit të brendshëm dhe nuk kanë nevojë të përcaktohen duke përdorur fjalën kyçe globale.

Këtu është një listë e superglobaleve të disponueshëm në versionin PHP 5.3:

  • $ GLOBALS - lista e të gjitha ndryshoreve globale në skenar (duke përjashtuar superglobalet)
  • $ _GET - përmban një listë të të gjitha fushave të formave të paraqitura nga shfletuesi duke përdorur një kërkesë GET
  • $ _POST - përmban një listë të të gjitha fushave të formularit të paraqitura nga shfletuesi duke përdorur një kërkesë POST
  • $ _COOKIE - përmban një listë të të gjithë cookies që dërgohen nga shfletuesi
  • $ _REQUEST - përmban të gjitha kombinimet e çelësave / vlerave që përmbahen në vargjet $ _GET, $ _POST, $ _COOKIE
  • $ _FILES - përmban një listë të të gjithë skedarëve të ngarkuar nga shfletuesi
  • $ _SESSION - ju lejon të ruani dhe përdorni variablat e sesionit për shfletuesin aktual
  • $ _SERVER - përmban informacion në lidhje me serverin, siç është emri i skedarit të skenarit që ekzekutohet dhe adresa IP e shfletuesit.
  • $ _ENV - Përmban një listë të ndryshoreve të mjedisit të kaluara në PHP, për shembull ndryshoret CGI.
Për shembull, mund të përdorni $ _GET për të marrë vlerat e variablave të mbyllura në vargun URL të kërkesës së skriptit dhe për t'i shfaqur ato në faqe:

Nëse ekzekutoni skenarin e mësipërm me vargun URL http://www.example.com/script.php?yourName\u003dFred, ai do të dalë:

Përshëndetje Fred!

Paralajmërim! Në një skenar real, nuk duhet të përdorni kurrë transferimin e tillë të të dhënave për shkak të sigurisë së dobët. Gjithmonë duhet të kontrolloni ose filtroni të dhënat tuaja.

Superglobal $ GLOBALS është shumë i përshtatshëm për t'u përdorur sepse ju lejon të organizoni hyrjen në ndryshoret globale në një funksion pa pasur nevojë të përdorni fjalën kyçe globale. Për shembull:

";) sayHello (); // Rezultatet" Përshëndetje, Zoe! "?\u003e

Variablat statike: ato janë diku afër

Kur krijoni një ndryshore lokale brenda një funksioni, ajo ekziston vetëm ndërsa funksioni po ekzekutohet. Kur funksioni mbaron, ndryshorja lokale zhduket. Kur funksioni thirret përsëri, krijohet një ndryshore e re lokale.

Kjo funksionon shumë mirë në shumicën e rasteve. Në këtë mënyrë funksionet janë të pavarura dhe funksionojnë gjithmonë njësoj sa herë që thirren.

Sidoqoftë, ka situata ku do të ishte e përshtatshme të krijoni një ndryshore lokale që "kujton" vlerën e saj midis thirrjeve të funksioneve. Një ndryshore e tillë quhet statike.

Për të krijuar një ndryshore statike në një funksion, duhet të përdorni fjalën kyçe statike para emrit të ndryshores dhe sigurohuni që t'i vendosni një vlerë fillestare. Për shembull:

Funksioni myFunction () (statike $ myVariable \u003d 0;)

Le të shqyrtojmë një situatë kur është e përshtatshme të përdorësh një ndryshore statike. Le të themi që ju krijoni një funksion që, kur thirret, krijon një miniaplikacion dhe shfaq numrin e miniaplikacioneve të krijuara tashmë. Mund të provoni të shkruani kodin si ky duke përdorur një ndryshore lokale:


"; echo createWidget ()." ne tashmë kemi krijuar.
"; echo createWidget ()." ne tashmë kemi krijuar.\u003e
"; ?>

Por, meqenëse ndryshorja $ numWidgets krijohet sa herë që thirret funksioni, ne do të marrim rezultatin e mëposhtëm:

Ne krijojmë disa widget ... 1 që kemi krijuar tashmë. 1 e kemi krijuar tashmë. 1 e kemi krijuar tashmë.

Por duke përdorur një ndryshore statike, ne mund ta ruajmë vlerën nga një thirrje funksioni në tjetrën:

"; echo createWidget ()." ne tashmë kemi krijuar.
"; echo createWidget ()." ne tashmë kemi krijuar.
"; echo createWidget ()."\u003e ne tashmë kemi krijuar.
"; ?>

Tani skenari do të prodhojë rezultatin e pritur:

Ne krijojmë disa widget ... 1 që kemi krijuar tashmë. 2 ne tashmë kemi krijuar. 3 ne tashmë kemi krijuar.

Edhe pse një ndryshore statike ruan vlerën e saj midis thirrjeve të funksioneve, ajo është e vlefshme vetëm kur skenari ekzekutohet. Sapo skenari të përfundojë ekzekutimin e tij, të gjitha ndryshoret statike shkatërrohen, si dhe ndryshoret lokale dhe globale.

Kjo eshte e gjitha! Kontrolloni shpesh dokumentacionin e PHP.