Si të shfaqni vlerat e të gjitha variablave të mjedisit në Windows. Si të shfaqni vlerat e të gjitha variablave të mjedisit në Windows Printimi i vlerës së një ndryshoreje në ekran

Me siguri keni një dollap apo komodë në shtëpi. Parimi i përdorimit të tyre është i thjeshtë: vendosim gjëra që nuk na duhen për momentin, por mund të nevojiten pas një kohe.

Variablat janë rregulluar saktësisht në të njëjtën mënyrë. Mund t'i vendosni pak vlerë dhe t'i ruani atje derisa t'ju nevojitet.

Krijimi i variablave

Ju mund të vendosni një vlerë në një ndryshore si kjo:

Në kodin e mësipërm, ne krijuam ndryshoren $name dhe vendosëm vlerën Ivan në të, më pas krijuam variablin $age dhe ia caktuam vlerën 20.

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

Në disa gjuhë, një variabël duhet së pari të "deklarohet" përpara se të përdoret. Nuk ka asnjë deklaratë në PHP - një ndryshore krijohet në momentin kur vendosni një vlerë në të.
Sidoqoftë, programuesit PHP shpesh thonë "deklaro një ndryshore" në vend të "krijo një ndryshore".

Gjithashtu, në vend të "vendos një vlerë në një ndryshore" shpesh thuhet "cakto një vlerë".
Arsyeja është e thjeshtë - simboli = , falë të cilit ruajmë vlerën në një variabël, quhet "operatori i caktimit". Prandaj termi "cakto".

Konventat e emërtimit të variablave

1. Emri i ndryshores fillon me simbolin $.

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

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

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

Ju mund të shfaqni një variabël duke përdorur komandën echo të njohur tashmë për ne:

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

Vini re se kemi kaluar 2 vlera në jehonë, duke i ndarë ato me presje. Kështu që ne mund të kalojmë aq vlera sa të duam. Dy shembujt e mëposhtëm do të japin të njëjtin rezultat:

Gjithashtu në PHP ekziston një sintaksë stenografike për nxjerrjen e variablave. Në vend të

Përpara PHP 5.4, sintaksa e stenografisë funksiononte vetëm kur përfshihej në Cilësimet e PHP direktiva short_open_tag, e cila gjithashtu ju lejon të përdorni një etiketë hapëse të shkurtuar

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 "" absolutisht asgjë nuk do të shfaqet në ekran. Dhe nuk është e qartë se cila është arsyeja - në një variabël bosh ose kod që nuk funksionon.

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 nxjerr jo vetëm përmbajtjen e ndryshores, por edhe numrin e karaktereve, madje edhe llojin e ndryshores (string). Ne do t'i shikojmë llojet e të dhënave në detaje në mësimet e ardhshme.

Heqja e variablave

Ju mund të hiqni një variabël ekzistues duke përdorur funksionin unset():

Dhe tani është koha për të praktikuar pak.

Mos harroni, pothuajse çdo problem 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.

Shkruani një skenar që:
1. Krijon variabla me emrin titull dhe përmbajtje dhe disa vlera.
2. Shfaq 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, ""; jehonë"

", $content, "
"; ?>

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

Variablat e mjedisit (mjedisi) në Windows përmbajnë informacione të ndryshme rreth cilësimeve të sistemit dhe mjedisit të përdoruesit. Bëhet një dallim midis ndryshoreve të mjedisit të përdoruesit, sistemit dhe 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) -> Avancuar -> Variablat e mjedisit. Siç mund ta shihni, ka dy seksione në seksionin e hapur: pjesa e sipërme përmban variablat e mjedisit të përdoruesit, pjesa e poshtme përmban ato të sistemit.

Përveç kësaj, variablat e mjedisit ruhen në regjistrin e sistemit. Variablat e përdoruesit ruhen në . Sistemik - në HKLM\SYSTEM\CurrentControlSet\Control\Menaxheri i sesioneve\Mjedisi.

Ju mund të shfaqni vlerat e të gjitha variablave të mjedisit në linja e komandës Dritaret. Komanda është e thjeshtë:

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

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

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

echo %systemroot%

set > c:\tmp\env_var.txt

Variablat e mjedisit të një procesi të caktuar mund të merren duke përdorur falas Përpunoni shërbimet e Explorer(nga Sysinternals). Thjesht hapni vetitë e procesit dhe shkoni te skeda Mjedisi.

Ky mësim fokusohet në shtrirjen e variablave PHP. Shpjegon ndryshimin midis shtrirjes lokale dhe globale, tregon se si të aksesoni ndryshoret globale brenda një funksioni, si të punoni me superglobalët dhe të krijoni variabla statike.

Kur filloni të mësoni PHP dhe filloni të punoni me funksione dhe objekte, shtrirja e ndryshueshme është pak konfuze. Për fat të mirë, rregullat e PHP-së në këtë drejtim janë shumë të lehta për t'u kuptuar (në krahasim me gjuhët e tjera të programimit).

Çfarë është fushëveprimi?

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

  • globale- variablat mund të aksesohen kudo në skript
  • Lokal- variablat mund të aksesohen vetëm brenda funksionit në të cilin janë përcaktuar

Shtrirja e ndryshueshme, dhe veçanërisht shtrirja lokale, thjeshton shumë menaxhimin e kodit. Nëse të gjitha variablat ishin globale, atëherë ato mund të ndryshoheshin kudo në skript. Kjo do të çonte në kaos dhe skripte të mëdha, pasi shumë shpesh pjesë të ndryshme të skriptit përdorin variabla me të njëjtin emër. Duke kufizuar shtrirjen në kontekstin lokal, ju përcaktoni kufijtë e kodit që mund të aksesojë variablin, gjë që e bën kodin më të fortë, modular dhe më të lehtë për të korrigjuar gabimet.

Variablat me shtrirje globale quhen variabla globale, dhe ato me shtrirje lokale quhen variabla lokale.

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

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

Përshëndetje Harry! Vlera e $globalName: "Zoya" vlera e $localName: ""

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

  • $globalName- Kjo globale e ndryshueshme
  • $localName- Kjo lokal një variabël që krijohet brenda funksionit sayHello().

Pasi të krijohen variabla dhe funksioni, skripti thërret sayHello() , i cili printon "Hi Harry!" . Më pas skripti përpiqet të nxjerrë vlerat e dy variablave duke përdorur funksionin echo. Ja çfarë ndodh:

  • Sepse $globalNameështë krijuar jashtë funksionit, është i disponueshëm kudo në skript, kështu që shfaqet "Zoya".
  • $localName do të jetë i disponueshëm vetëm brenda funksionit sayHello(). Për shkak se shprehja e ekos është jashtë funksionit, PHP nuk lejon qasje në variablin lokal. Në vend të kësaj, PHP supozon se kodi do të krijojë një ndryshore të re të quajtur $localName, e cila do të jetë e paracaktuar në një varg bosh. kjo është arsyeja pse thirrja e dytë për echo nxjerr vlerën "" për ndryshoren $localName.

Qasja në variablat globale brenda një funksioni

Për të hyrë në një ndryshore globale jashtë funksionit thjesht shkruani emrin e saj. Por për të hyrë në një ndryshore globale brenda një funksioni, fillimisht duhet të deklaroni variablin si global në funksion duke përdorur fjalën kyçe globale:

Funksioni myFunction() ( global $globalVariable; // Qasja në variablin global $globalVariable )

Nëse jo, atëherë PHP supozon se po krijoni ose përdorni një variabël lokale.

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

"; global $globalName; jehonë "Përshëndetje $globalName!
"; ) sayHello(); ?>

Kur të ekzekutohet, skripti 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 global. Ajo më pas mund të hyjë në ndryshore dhe të nxjerrë vlerën e saj ("Zoya").

Çfarë janë superglobalët?

PHP ka një grup të veçantë vargjesh globale të paracaktuara që përmbajnë informacione të ndryshme. Vargje të tilla quhen superglobalët, pasi ato janë të aksesueshme nga kudo në skript, duke përfshirë hapësirën e brendshme të funksionit, dhe nuk kanë nevojë të përcaktohen duke përdorur fjalën kyçe globale.

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

  • $GLOBALS - lista e të gjitha variablave globale në skript (duke përjashtuar superglobalët)
  • $_GET - përmban një listë të të gjitha fushave të formularit të paraqitura nga shfletuesi me 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ë gjitha cookie-ve të dërguara nga shfletuesi
  • $_REQUEST - përmban të gjitha kombinimet e çelësave/vlerave të përfshira në grupet $_GET, $_POST, $_COOKIE
  • $_FILES - përmban një listë të të gjithë skedarëve të shkarkuar nga shfletuesi
  • $_SESSION - ju lejon të ruani dhe përdorni variablat e sesionit për shfletuesin aktual
  • $_SERVER - përmban informacione rreth serverit, si emri i skedarit të skriptit që po ekzekutohet dhe adresa IP e shfletuesit.
  • $_ENV - Përmban një listë të variablave të mjedisit të kaluar në PHP, të tilla si variablat CGI.
Për shembull, mund të përdorni $_GET për të marrë vlerat e variablave që përmbahen në vargun e URL-së së kërkesës së skriptit dhe t'i shfaqni ato në faqe:

Nëse ekzekutoni skriptin e mësipërm me URL-në http://www.example.com/script.php?yourName=Fred, ai do të dalë:

Hej Fred!

Paralajmërim! Në një skript të vërtetë, ky transferim i të dhënave nuk duhet të përdoret kurrë për shkak të sigurisë së dobët. Ju gjithmonë duhet të kontrolloni ose filtroni të dhënat.

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

"; ) sayHello(); // Shfaq "Përshëndetje Zoya!" ?>

Variablat statikë: ato janë diku përreth

Kur krijoni një ndryshore lokale brenda një funksioni, ajo ekziston vetëm kur funksioni është duke u ekzekutuar. Kur funksioni përfundon, ndryshorja lokale zhduket. Kur funksioni thirret përsëri, krijohet një ndryshore e re lokale.

Në shumicën e rasteve, kjo funksionon shkëlqyeshëm. Kështu, funksionet janë të vetë-mjaftueshme dhe funksionojnë gjithmonë në të njëjtën mënyrë sa herë që thirren.

Megjithatë, ka situata ku do të ishte e përshtatshme të krijohej një ndryshore lokale që "kujton" vlerën e saj midis thirrjeve të funksionit. Një variabël i tillë quhet statik.

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

Funksioni myFunction() ( statik $myVariable = 0; )

Konsideroni një situatë ku është e përshtatshme të përdorni një ndryshore statike. Le të themi se keni krijuar një funksion që, kur thirret, krijon një miniaplikacion dhe printon numrin e miniaplikacioneve të krijuara tashmë. Mund të provoni të shkruani kod si ky duke përdorur një ndryshore lokale:


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

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

Ne krijojmë disa miniaplikacione... 1 kemi krijuar tashmë. 1 ne kemi krijuar tashmë. 1 ne kemi krijuar tashmë.

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

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

Tani skenari do të prodhojë rezultatin e pritur:

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

Edhe pse një ndryshore statike ruan vlerën e saj midis thirrjeve të funksionit, ajo është e vlefshme vetëm kur skripti është duke u ekzekutuar. Pasi skripti përfundon ekzekutimin e tij, të gjitha variablat statike shkatërrohen, si dhe variablat lokale dhe globale.

Kjo eshte e gjitha! Referojuni shpesh dokumentacionit PHP.

13 vjet më parë

Një gjë e vogël për t'u kujdesur:

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

varg
[ GLOBALE ] => Array
[ GLOBALE ] => Array
* REKURSION *
[_POST] => Array ()
[_GET] => Array ()
[_COOKIE] => Array()
[ _FILES] => Array()
)

[_POST] => Array ()
[_GET] => Array ()
[_COOKIE] => Array()
[ _FILES] => Array()

)
?>

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

shtyp"

" .htmlspecialchars(print_r(get_defined_vars(), true )) ."
" ;
shtyp"
" .htmlspecialchars (print_r ($_SERVER , e vërtetë )) ."
" ;
?>

Dhe pastaj $_SERVER do të shfaqet në të dyja listat. Mendoj se "nuk është me të vërtetë një gjë e keqe, sepse asgjë e keqe nuk do të ndodhë sidoqoftë, por megjithatë është një kuriozitet interesant.

6 vjet më parë

Meqenëse get_defined_vars() merr variablat vetëm në pikën që thërrisni funksionin, ekziston një mënyrë e thjeshtë për të marrë variablat e përcaktuara brenda fushëveprimit aktual.

// Pjesa e sipërme e skriptit tuaj php
$vars = get_defined_vars();

// Tani bëni gjërat tuaja
$foo = "foo" ;
$bar = "bar" ;

// Merrni të gjitha variablat e përcaktuar në shtrirjen aktuale
$vars = grupi_diff(get_defined_vars(), $vars);

jehonë"

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

15 vjet më parë

Këtu është një funksion që 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ë të dhënat e përdoruesit.

funksioni generateDebugReport ($method , $defined_vars , $email = "i papërcaktuar" )(
// Funksioni për të krijuar një raport korrigjimi për t'u shfaqur ose email.
// Përdorimi: gjenerojeDebugReport(metoda,get_defined_vars(),email);
// Ku metoda është "shfletuesi" ose "email".

// Krijo 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 (njëlloj si _POST, _GET)
// Përfshini gjithashtu varet që dëshironi të injorohen për arsye sigurie - d.m.th. PHPSESSID.
$ignorelist =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 = data("m/d/y h:m:s" );
$message = "Raporti i korrigjimit u krijua $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 konfigurimin tuaj të bazës së të dhënave ose abstraksionit.
globale $link ;
$sql_error = mysql_error($link);
nëse ($sql_error )(
$message .= "\nMesazhet Mysql:\n" . mysql_error ($link);
}
// Fund MySQL

// Mund të përdorë një funksion rekurziv këtu. E keni idenë ;-)
foreach($defined_vars si $key => $val )(
if(is_array ($val ) && ! in_array ($key , $ignorelist ) && count ($val ) > 0 )(
$message .= "\n grupi i $keys (çelësi=vlera):\n" ;
foreach($val si $subkey => $subval )(
if(! in_array ($subkey , $ignorelist ) && ! is_array ($subval ))(
$message .= $nënçelës . "=" . $subval . "\n" ;
}
elseif(! in_array ($subkey , $ignorelist ) && is_array ($subval ))(
foreach ($subval si $subsubkey => $subval )(
if(! in_array ($subkey , $ignorelist ))(
$message .= $nënçelës . "=" . $subval . "\n" ;
}
}
}
}
}
tjeter nese(!
është_array ($val ) && ! in_array ($key, $ignorelist) && $val)(
$message .= "\nNdryshore " . $kyç. "=" . $val. "\n" ;
}
}

If($method == "shfletuesi" )(
echo nl2br ($mesazh);
}
elseif($method == "email" )(
if($email == "e pacaktuar" )(
$email = $_SERVER["SERVER_ADMIN"];
}

$mresult = mail ($email , "Raporti i korrigjimit për " . $_ENV [ "HOSTNAME" ]. "" , $message );
nëse ($mresult == 1 )(
jehonë "Raporti i korrigjimit u dërgua me sukses.\n";
}
tjeter(
jehonë "Dështoi dërgimi i 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 = "" ) (
ndërsa (lista($kyç, $val) = secili ($v)) (
nëse ($key == "__attr") vazhdon;
// Kontrollo për __attr
nëse (është_objekt ($val -> __attr )) (
ndërsa (lista($key2, $val2) = secili ($val -> __attr )) (
$attr .= " $key2 =\" $val2 \"" ;
}
}
else $attr = "" ;
nëse (është_array ($val ) || është_objekt ($val )) (
print(" $indent< $key$attr >\n");
obj2xml ($val, $indent. " ");
print(" $indent\n");
}
else print(" $indent< $key$attr >$val\n");
}
}

//Shembull objekt
$x -> emri -> pari = "Gjoni" ;
$x -> emri -> fundit = "Smith" ;
$x -> arr [ "Fruit" ] = "Banane" ;
$x -> arr [ "Veg" ] = "Karotë" ;
$y -> klient = $x;
$y -> klient -> __attr -> id = "176C4" ;

$z = get_defined_vars();
obj2xml($z["y"]);
?>
do të nxjerrë:


Gjoni
Smith


Banane
karrota

11 vjet më parë

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

// përcaktoni një variabël
$my_var = "foo" ;

// merrni listën tonë të variablave të përcaktuar
$defined_vars = get_defined_vars();

// tani përpiquni të ndryshoni vlerën përmes grupit të kthyer
$defined_vars [ "my_var" ] = "bar" ;

echo $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ë referenca, por unë imagjinoj se është një kërkesë mjaft e specializuar. Mund ta bëni vetë (më pak lehtësisht) me diçka të tillë:

$defined_vars = grup();
$var_emrat = çelësat_array(get_defined_vars());

foreach ($var_names si $var_name )
{
$defined_vars [ $var_name ] =& $var_name ;
}

?>

1 vit me pare

Unë postova këtu më parë për "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(çelësat_array(get_defined_vars()));$a = 123;)
funksioni publik b() (var_dump(tasat_array(get_defined_vars()));$this;)
}
$t = test i ri();
$t->a();
$t->b();
"

grup ()
grup ("kjo")

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

1 vit me pare

Disa komente këtu theksojnë se ky funksion nuk do të kthejë referenca. Megjithatë, i kthen emrat dhe emrat janë "referenca".

Unë nuk do t'i rekomandoja sugjerimet këtu që e kthejnë atë në referenca.

funksioni publik x($a, $b, $c) (
foreach(çelësat_array(get_defined_vars()) si $key)
if ($key !== "kjo")
$this->y($($key));
}

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

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

Unë kam bërë disa gjëra të çuditshme në kohën time për të krijuar kod jashtëzakonisht të përgjithshëm, por kurrë nuk më është dashur të bëj diçka si më sipër. Mund të mos funksionojë (por do të funksionojë pasi nuk është ndryshe nga $a[$key]).

Ju gjithashtu mund të bëni $$key ++, por unë kurrë nuk kam parë kod si ai që nuk ishte tmerrësisht i keq (duke përdorur dinamikën ku dinamika nuk është e dobishme).

Nëse jeni duke bërë diçka të tillë, atëherë jepini një shqyrtim shtesë.

13 vjet më parë

Një gjë e vogël për t'u kujdesur:

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

varg
[ GLOBALE ] => Array
[ GLOBALE ] => Array
* REKURSION *
[_POST] => Array ()
[_GET] => Array ()
[_COOKIE] => Array()
[ _FILES] => Array()
)

[_POST] => Array ()
[_GET] => Array ()
[_COOKIE] => Array()
[ _FILES] => Array()

)
?>

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

shtyp"

" .htmlspecialchars(print_r(get_defined_vars(), true )) ."
" ;
shtyp"
" .htmlspecialchars (print_r ($_SERVER , e vërtetë )) ."
" ;
?>

Dhe pastaj $_SERVER do të shfaqet në të dyja listat. Mendoj se "nuk është me të vërtetë një gjë e keqe, sepse asgjë e keqe nuk do të ndodhë sidoqoftë, por megjithatë është një kuriozitet interesant.

6 vjet më parë

Meqenëse get_defined_vars() merr variablat vetëm në pikën që thërrisni funksionin, ekziston një mënyrë e thjeshtë për të marrë variablat e përcaktuara brenda fushëveprimit aktual.

// Pjesa e sipërme e skriptit tuaj php
$vars = get_defined_vars();

// Tani bëni gjërat tuaja
$foo = "foo" ;
$bar = "bar" ;

// Merrni të gjitha variablat e përcaktuar në shtrirjen aktuale
$vars = grupi_diff(get_defined_vars(), $vars);

jehonë"

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

15 vjet më parë

Këtu është një funksion që 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ë të dhënat e përdoruesit.

funksioni generateDebugReport ($method , $defined_vars , $email = "i papërcaktuar" )(
// Funksioni për të krijuar një raport korrigjimi për t'u shfaqur ose email.
// Përdorimi: gjenerojeDebugReport(metoda,get_defined_vars(),email);
// Ku metoda është "shfletuesi" ose "email".

// Krijo 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 (njëlloj si _POST, _GET)
// Përfshini gjithashtu varet që dëshironi të injorohen për arsye sigurie - d.m.th. PHPSESSID.
$ignorelist =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 = data("m/d/y h:m:s" );
$message = "Raporti i korrigjimit u krijua $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 konfigurimin tuaj të bazës së të dhënave ose abstraksionit.
globale $link ;
$sql_error = mysql_error($link);
nëse ($sql_error )(
$message .= "\nMesazhet Mysql:\n" . mysql_error ($link);
}
// Fund MySQL

// Mund të përdorë një funksion rekurziv këtu. E keni idenë ;-)
foreach($defined_vars si $key => $val )(
if(is_array ($val ) && ! in_array ($key , $ignorelist ) && count ($val ) > 0 )(
$message .= "\n grupi i $keys (çelësi=vlera):\n" ;
foreach($val si $subkey => $subval )(
if(! in_array ($subkey , $ignorelist ) && ! is_array ($subval ))(
$message .= $nënçelës . "=" . $subval . "\n" ;
}
elseif(! in_array ($subkey , $ignorelist ) && is_array ($subval ))(
foreach ($subval si $subsubkey => $subval )(
if(! in_array ($subkey , $ignorelist ))(
$message .= $nënçelës . "=" . $subval . "\n" ;
}
}
}
}
}
tjeter nese(!
është_array ($val ) && ! in_array ($key, $ignorelist) && $val)(
$message .= "\nNdryshore " . $kyç. "=" . $val. "\n" ;
}
}

If($method == "shfletuesi" )(
echo nl2br ($mesazh);
}
elseif($method == "email" )(
if($email == "e pacaktuar" )(
$email = $_SERVER["SERVER_ADMIN"];
}

$mresult = mail ($email , "Raporti i korrigjimit për " . $_ENV [ "HOSTNAME" ]. "" , $message );
nëse ($mresult == 1 )(
jehonë "Raporti i korrigjimit u dërgua me sukses.\n";
}
tjeter(
jehonë "Dështoi dërgimi i 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 = "" ) (
ndërsa (lista($kyç, $val) = secili ($v)) (
nëse ($key == "__attr") vazhdon;
// Kontrollo për __attr
nëse (është_objekt ($val -> __attr )) (
ndërsa (lista($key2, $val2) = secili ($val -> __attr )) (
$attr .= " $key2 =\" $val2 \"" ;
}
}
else $attr = "" ;
nëse (është_array ($val ) || është_objekt ($val )) (
print(" $indent< $key$attr >\n");
obj2xml ($val, $indent. " ");
print(" $indent\n");
}
else print(" $indent< $key$attr >$val\n");
}
}

//Shembull objekt
$x -> emri -> pari = "Gjoni" ;
$x -> emri -> fundit = "Smith" ;
$x -> arr [ "Fruit" ] = "Banane" ;
$x -> arr [ "Veg" ] = "Karotë" ;
$y -> klient = $x;
$y -> klient -> __attr -> id = "176C4" ;

$z = get_defined_vars();
obj2xml($z["y"]);
?>
do të nxjerrë:


Gjoni
Smith


Banane
karrota

11 vjet më parë

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

// përcaktoni një variabël
$my_var = "foo" ;

// merrni listën tonë të variablave të përcaktuar
$defined_vars = get_defined_vars();

// tani përpiquni të ndryshoni vlerën përmes grupit të kthyer
$defined_vars [ "my_var" ] = "bar" ;

echo $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ë referenca, por unë imagjinoj se është një kërkesë mjaft e specializuar. Mund ta bëni vetë (më pak lehtësisht) me diçka të tillë:

$defined_vars = grup();
$var_emrat = çelësat_array(get_defined_vars());

foreach ($var_names si $var_name )
{
$defined_vars [ $var_name ] =& $var_name ;
}

?>

1 vit me pare

Unë postova këtu më parë për "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(çelësat_array(get_defined_vars()));$a = 123;)
funksioni publik b() (var_dump(tasat_array(get_defined_vars()));$this;)
}
$t = test i ri();
$t->a();
$t->b();
"

grup ()
grup ("kjo")

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

1 vit me pare

Disa komente këtu theksojnë se ky funksion nuk do të kthejë referenca. Megjithatë, i kthen emrat dhe emrat janë "referenca".

Unë nuk do t'i rekomandoja sugjerimet këtu që e kthejnë atë në referenca.

funksioni publik x($a, $b, $c) (
foreach(çelësat_array(get_defined_vars()) si $key)
if ($key !== "kjo")
$this->y($($key));
}

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

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

Unë kam bërë disa gjëra të çuditshme në kohën time për të krijuar kod jashtëzakonisht të përgjithshëm, por kurrë nuk më është dashur të bëj diçka si më sipër. Mund të mos funksionojë (por do të funksionojë pasi nuk është ndryshe nga $a[$key]).

Ju gjithashtu mund të bëni $$key ++, por unë kurrë nuk kam parë kod si ai që nuk ishte tmerrësisht i keq (duke përdorur dinamikën ku dinamika nuk është e dobishme).

Nëse jeni duke bërë diçka të tillë, atëherë jepini një shqyrtim shtesë.



Artikuj të ngjashëm: