Varijable u PHP-u. Kako prikazati vrijednosti svih varijabli okruženja u Windows operacijama s PHP varijablama

💖 Sviđa li vam se? Podijelite vezu sa svojim prijateljima

Varijable u php- ovo je vrsta spremnika informacija koji može sadržavati Različite vrste podaci (tekst, brojevi, nizovi itd.). Općenito, varijable vam omogućuju da kreirate, pohranjujete, mijenjate i kasnije brzo pristupate informacijama navedenim u njima.

Kako stvoriti varijablu u PHP-u

U početku varijable sadrže znak $ (dolar) - oznaka korištenja varijable, zatim slova latinica(od a do z i mali i veliki), na kraju mogu sadržavati brojevima. Također je moguće koristiti podvlaku u naslovu (ne na kraju).

Kako možete imenovati varijable:

$var
$varijabla
$godina1945
$_varijabla
Kako ne imenovati varijable:

$1 - sastoji se samo od brojeva
$1var - naziv varijable ne možete započeti brojem
$/var - od dodatnih znakova dopuštena je samo podvlaka _
$varijabla - PHP dokumentacija dopušta ćirilicu, ali se ne preporučuje
$varijabla - razmaci se ne mogu koristiti

Svakoj varijabli je dodijeljena vrijednost. Znak se koristi za dodjeljivanje vrijednosti = (jednako). Tijekom obrade skripte, vrijednost varijable može se više puta mijenjati ovisno o različitim uvjetima.

$city = "Moskva"; // varijabli $city dodijeljena je vrijednost niza (u navodnicima) Moskva
$godina = 1147; // a varijabli $year dodijeljena je numerička vrijednost 1147
?>

$name = "Aleksandar";
$Name = "Aleksej";
echo "$name, $Name"; // ispisat će "Alexander, Alexey"
?>

Ispis PHP varijabli

Zasebno biste trebali pogledati kako prikazati varijable pomoću izlazne izjave, čiji smo rad ispitali u prošloj lekciji Stvaranje PHP stranice. Operatori zaključivanja. . U nastavku ću dati nekoliko ilustrativnih primjera s komentarima.

// Ovako postavljamo vrijednosti varijabli
$name1 = "Aleksej";
$name2 = "Aleksandar";

// Izlazne varijable
echo $name2; // Izlaz: Alexander
echo "ime1 je $ime1"; // ime1 je Alexey

// Kada koristite jednostruke navodnike, izlaz
// naziv varijable, a ne vrijednost
echo "ime1 je $ime1"; // će ispisati: ime1 je $ime1

// možete jednostavno prikazati vrijednosti varijabli
echo $name1; // Aleksej
echo $name1,$name2; // AlexeyAlexander
echo $name1." ".$name2; // Alexey Alexander
echo "$name1, $name2"; // Alexey, Alexander

Jeka<<Ovo koristi sintaksu "ovdje dokument" za izlaz
nekoliko redaka s $variable zamjenom varijable.
KRAJ;

Operacije s PHP varijablama

Aritmetičke operacije u PHP-u
U slučaju numeričkih vrijednosti, možete izvoditi aritmetičke operacije: zbrajanje, oduzimanje, množenje i tako dalje.

-$a(negacija) Promjena predznaka $a.
$a + $b(zbrajanje) Zbroj $a i $b.
$a - $b(oduzimanje) Razlika $a i $b.
$a * $b(množenje) Umnožak $a i $b.
$a / $b(dijeljenje) Kvocijent od $a podijeljeno s $b.
$a % $b(modulo dijeljenje) Cjelobrojni ostatak kada se $a podijeli s $b.
Pogledajmo primjere

$a = 2; // imajte na umu da se u slučaju brojeva ne koriste navodnici
$b = 3; // imajte na umu da se u slučaju brojeva ne koriste navodnici

$rezultat = $a + $b; // dodaj varijable
echo $rezultat; // ispisat će 5

$rezultat = $b - $a; // dodaj varijable
echo $rezultat; // ispisat će 1

Operacije povećanja i smanjenja u PHP-u
Ove operacije bit će korisne uglavnom pri konstrukciji ciklusa, o čemu ćemo govoriti malo kasnije.
Prefiks- operatori napisani PRIJE varijable ( --$a; +$a). Vrati vrijednost varijable prije promjena.
Postfiks- operatori napisani iza varijable ( $a--; $a--). Vrati vrijednost varijable s promjenama.
Povećanje- povećanje vrijednosti.
Smanjenje- opadajuća vrijednost.

+$a Povećanje prefiksa. Povećava $a za jedan i vraća vrijednost $a.
$a++ Postfiksni inkrement. Vraća vrijednost $a i zatim povećava $a za jedan.
--$a Dekrement prefiksa. Smanjuje $a za jedan i vraća vrijednost $a.
$a-- Postfiksni dekrement. Vraća vrijednost $a i zatim smanjuje $a za jedan.
jeka "

Postfiksni inkrement

";
$a = 5;
echo "Trebalo bi biti 5: " . $a++ . "\n";

Jeka"

Povećanje prefiksa

";
$a = 5;
echo "Mora biti 6: " . +$a. "\n";
echo "Mora biti 6: " . $a . "\n";

Jeka"

Postfiksni dekrement

";
$a = 5;
echo "Trebalo bi biti 5: " . $a-- . "\n";

Jeka"

Dekrement prefiksa

";
$a = 5;
echo "Mora biti 4: " . --$a . "\n";
echo "Mora biti 4: " . $a . "\n";
?>

Operacije dodjele u PHP-u
Osnovni operator izgleda kao = . Na prvi pogled može se činiti da je to operator jednakosti. Zapravo to nije istina. U stvari, operator dodjele znači da lijevi operand preuzima vrijednost desnog izraza (to jest, postavljen je rezultirajućom vrijednošću). Kombinirani operatori- ovo su operatori koji vam omogućuju korištenje prethodnih vrijednosti varijabli za sljedeće operacije (dodavanje varijabli niza (s tekstom) ili dodavanje numeričkih vrijednosti).

$a = ($b = 2) + 4; // rezultat: $a je postavljeno na 6, varijabli $b je dodijeljeno 2.

$a = 2;
$a += 3; // postavlja $a na 5, slično pisanju: $a = $a + 3;
$b = "Zdravo";
$b .= "Mir!"; // postavlja $b na niz "Hello World!", kao $b = $b. "Tamo!";

Postoje također operacije usporedbe I mozgalica, ali o njima ćemo govoriti u narednim lekcijama. Pokušat ću vas ne prestrašiti velikom količinom informacija odmah!)

Varijable okruženja u sustavu Windows sadrže razne informacije o postavkama sustava i korisničkom okruženju. Razlikuju se varijable okoline korisnika, sustava i procesa.

Najlakši način da pogledate sadržaj varijabli okruženja u sustavu Windows je da otvorite Svojstva sustava ( sysdm.cpl) -> Napredno -> Varijable okruženja. Kao što vidite, u prozoru koji se otvori postoje dva odjeljka: gornji sadrži varijable okruženja korisnika, a donji sistemske.

Osim toga, varijable okruženja pohranjene su u registru sustava. Korisničke varijable pohranjene su u . Sustav - u HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment.

Možete prikazati vrijednosti svih varijabli okruženja u naredbeni redak Windows. Naredba je jednostavna:

Naredba će ispisati varijable okoline i njihove vrijednosti.

U PowerShell-u možete koristiti naredbu za prikaz svih varijabli okoline:

Ako trebate prikazati vrijednost samo jedne varijable, potrebno je koristiti naredbu echo, a naziv varijable mora biti u znaku postotka. Na primjer,

Echo %systemroot%

postavi > c:\tmp\env_var.txt

Varijable okoline za određeni proces mogu se dobiti pomoću besplatne Pomoćni programi Process Explorer(iz Sysinternalsa). Samo otvorite svojstva procesa i idite na karticu Okoliš.

prije 13 godina

Mali problem na koji treba pripaziti:

Ako isključite RegisterGlobals i srodne, a zatim koristite get_defined_vars(), mogli biste vidjeti nešto poput sljedećeg:

Niz
[ GLOBALI ] => Niz
[ GLOBALI ] => Niz
*REKURZIJA*
[ _POST ] => Array()
[ _GET ] => Array()
[ _COOKIE ] => Array()
[ _FILES ] => Array()
)

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

)
?>

Primijetite da $_SERVER nije tamo. Čini se da php učitava samo superglobalni $_SERVER ako se negdje koristi. Možete učiniti ovo:

ispis"

" . htmlspecialchars(print_r(get_defined_vars(), true))."
" ;
ispis"
" . htmlspecialchars (print_r ($_SERVER , true )) . "
" ;
?>

I tada će se $_SERVER pojaviti na oba popisa. Pretpostavljam da to baš i nije nešto loše, jer se ništa loše neće dogoditi ni u jednom slučaju, ali je svejedno zanimljiva zanimljivost.

prije 6 godina

Budući da get_defined_vars() dobiva samo varijable u trenutku kada pozovete funkciju, postoji jednostavan način da se varijable definiraju unutar trenutnog opsega.

// Sam vrh vaše php skripte
$vars = get_defined_vars();

// Sada radite svoje
$foo = "foo" ;
$bar = "bar" ;

// Dobivanje svih varijabli definiranih u trenutnom opsegu
$vars = array_diff(get_defined_vars(), $vars);

jeka "

"
;
print_r($vars);
jeka "
" ;
?>

prije 15 godina

Ovdje je funkcija koja generira izvješće o otklanjanju pogrešaka za prikaz ili e-poštu
koristeći get_defined_vars. Izvrstan za dobivanje detaljne snimke bez
oslanjajući se na korisnički unos.

funkcija generateDebugReport ($method, $defined_vars, $email = "undefined" )(
// Funkcija za izradu izvješća o otklanjanju pogrešaka za prikaz ili e-poštom.
// Upotreba: generateDebugReport(method,get_defined_vars(),email);
// Gdje je metoda "preglednik" ili "e-pošta".

// Kreirajte popis zanemarivanja za ključeve koje vraća "get_defined_vars".
// Na primjer, HTTP_POST_VARS, HTTP_GET_VARS i drugi jesu
// redundantno (isto kao _POST, _GET)
// Također uključite vars koje želite zanemariti iz sigurnosnih razloga - tj. 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");

$vremenska oznaka = datum ("m/d/g h:m:s");
$message = "Debug report created $timestamp \n" ;

// Dobivanje zadnje SQL pogreške za dobru mjeru, gdje je $link identifikator resursa
// za mysql_connect. Ostavite komentar ili izmijenite za svoju bazu podataka ili postavku apstrakcije.
globalna $link ;
$sql_greška = mysql_greška($link);
if($sql_error )(
$message .= "\nMysql poruke:\n" . mysql_greška($link);
}
// Završi MySQL

// Ovdje se može koristiti rekurzivna funkcija. Shvatili ste ;-)
foreach($defined_vars kao $key => $val )(
if(is_array ($val) && ! in_array ($key, $ignorelist) && count ($val) > 0 )(
$message .= "\n niz $ključeva (ključ=vrijednost):\n" ;
foreach($val kao $subkey => $subval )(
if(! in_array ($subkey, $ignorelist) && ! is_array ($subval))(
$message .= $podključ. " = ". $podval. "\n" ;
}
elseif(! in_array ($subkey, $ignorelist) && is_array ($subval))(
foreach($subval kao $subsubkey => $subsubval )(
if(! in_array ($subsubkey, $ignorelist))(
$message .= $subsubkey . " = ". $podpodval. "\n" ;
}
}
}
}
}
inače ako(!
je_niz ($val) && ! in_array ($key, $ignorelist) && $val)(
$message .= "\nVarijabla " . $ključ . " = ". $val. "\n" ;
}
}

If($method == "preglednik" )(
echo nl2br($poruka);
}
elseif($method == "e-mail" )(
if($email == "undefined" )(
$email = $_SERVER [ "SERVER_ADMIN" ];
}

$mresult = pošta ($email, "Izvješće o otklanjanju pogrešaka za ". $_ENV [ "HOSTNAME"]. "", $message);
if($mresult == 1 )(
jeka "Izvješće o otklanjanju pogrešaka uspješno je poslano.\n";
}
drugo(
jeka "Neuspješno slanje izvješća o otklanjanju pogrešaka.\n";
}
}
}
?>

prije 17 godina

Jednostavna rutina za pretvaranje get_defined_vars objekta u XML.

funkcija obj2xml ($v, $indent = "" ) (
dok je (popis($ključ, $val) = svaki ($v)) (
if ($key == "__attr" ) nastavi;
// Provjerite __attr
if (je_objekt ($val -> __attr)) (
dok (list($key2, $val2) = svaki ($val -> __attr)) (
$attr .= " $key2 =\" $val2 \"" ;
}
}
else $attr = "" ;
if (je_niz ($val) || je_objekt ($val)) (
print(" $uvlaka< $key$attr >\n" );
obj2xml($val, $uvlaka. "");
print(" $uvlaka\n" );
}
else print(" $uvlaka< $key$attr >$val\n" );
}
}

//Primjer objekta
$x -> ime -> prvi = "Ivan" ;
$x -> ime -> prezime = "Smith" ;
$x -> arr [ "Voće" ] = "Banana" ;
$x -> arr [ "Povrće" ] = "Mrkva" ;
$y -> korisnik = $x ;
$y -> kupac -> __attr -> id = "176C4" ;

$z = get_defined_vars();
obj2xml($z["y"]);
?>
će ispisati:


Ivan
Smith


Banana
Mrkva

prije 11 godina

Napomena, get_defined_vars() ne vraća skup referenci varijabli (kao što sam se nadao). Na primjer:

// definirati varijablu
$my_var = "foo" ;

// dobivanje našeg popisa definiranih varijabli
$defined_vars = get_defined_vars();

// sada pokušajte promijeniti vrijednost kroz vraćeni niz
$defined_vars [ "my_var" ] = "bar" ;

echo $my_var , "\n" ;

?>

će ispisati "foo" (izvorna vrijednost). Bilo bi lijepo kada bi get_defined_vars() imao izborni argument da ih napravi referencama, ali pretpostavljam da je to prilično specijaliziran zahtjev. Možete to učiniti sami (manje zgodno) s nečim poput:

$defined_vars = array();
$var_names = array_keys(get_defined_vars());

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

?>

prije 1 godinu

Prije sam ovdje objavio o tome da je "ovo" u get_defined_vars.

Ispostavilo se da nije uvijek tu, ali u određenim slučajevima će se neobjašnjivo pojaviti.

Php -r "
razredni test (
javna funkcija a() (var_dump(array_keys(get_defined_vars()));$a = 123;)
javna funkcija b() (var_dump(array_keys(get_defined_vars()));$this;)
}
$t = novi test();
$t->a();
$t->b();
"

Niz()
niz("ovo")

Ovo se ne događa u PHP 7.2, ali će se dogoditi u PHP 5.6.

prije 1 godinu

Neki komentari ovdje ističu da ova funkcija neće vratiti reference. Međutim, vraća imena, a imena su "reference".

Ovdje ne bih preporučio prijedloge koji to pretvaraju u reference.

Javna funkcija x($a, $b, $c) (
foreach(array_keys(get_defined_vars()) kao $key)
if($key !== "ovo")
$ovo->y($($ključ));
}

Javna funkcija y(&$input) (
$input++;
}

Umjesto $() možete koristiti i $$.

Radio sam neke čudne stvari u svoje vrijeme kako bih napravio krajnje generički kod, ali nikada nisam morao učiniti nešto poput gore navedenog. Možda čak i ne bi uspjelo (ali trebalo bi jer se ne razlikuje od $a[$key]).

Mogli biste napraviti i $$key++, ali nikad nisam vidio takav kod koji nije bio užasno loš (upotreba dinamike tamo gdje dinamika nije korisna).

Ako radite tako nešto, onda to dodatno proučite.

Ovaj vodič pokriva opseg PHP varijabli. Objašnjava razliku između lokalnog i globalnog opsega, pokazuje kako pristupiti globalnim varijablama unutar funkcije, kako raditi sa superglobalima i stvoriti statičke varijable.

Kada počnete učiti PHP i počnete raditi s funkcijama i objektima, opseg varijable je pomalo zbunjujući. Srećom PHP pravila u tom pogledu vrlo su laki za razumijevanje (u usporedbi s drugim programskim jezicima).

Što je opseg?

Opseg varijabli je kontekst unutar kojeg je varijabla definirana i gdje joj se može pristupiti. PHP ima dva opsega varijabli:

  • Globalno- varijablama se može pristupiti bilo gdje u skripti
  • Lokalni- varijablama se može pristupiti samo unutar funkcije u kojoj su definirane

Opseg varijable, a posebno lokalne, uvelike pojednostavljuje upravljanje kodom. Kad bi sve varijable bile globalne, tada bi se mogle mijenjati bilo gdje u skripti. To bi dovelo do kaosa i velikih skripti, jer vrlo često različiti dijelovi skripte koriste varijable s istim imenima. Ograničavanjem opsega na lokalni kontekst, definirate granice koda koji može pristupiti varijabli, što kod čini robusnijim, modularnijim i lakšim za otklanjanje pogrešaka.

Varijable s globalnim opsegom nazivaju se globalne, a varijable s lokalnim opsegom lokalne.

Evo primjera kako funkcioniraju globalne i lokalne varijable.

"; ) sayHello(); echo "Vrijednost \$globalName: "$globalName"
"; echo "\$localName vrijednost: "$localName"
"; ?>

Bok Harry! $globalName vrijednost: "Zoe" $localName vrijednost: ""

U ovaj scenarij stvorili smo dvije varijable:

  • $globalnoName- Ovo globalno varijabla
  • $localName- Ovo lokalni varijabla koja se stvara unutar funkcije sayHello().

Nakon kreiranja varijable i funkcije, skripta poziva sayHello(), koja ispisuje "Hello Harry!" . Skripta zatim pokušava ispisati vrijednosti dviju varijabli pomoću funkcije echo. Evo što se događa:

  • Jer $globalnoName je stvoren izvan funkcije, dostupan je bilo gdje u skripti, tako da je izlaz "Zoe".
  • $localName bit će dostupan samo unutar funkcije sayHello(). Budući da je echo izraz izvan funkcije, PHP ne omogućuje pristup lokalnoj varijabli. Umjesto toga, PHP očekuje da kôd stvori novu varijablu pod nazivom $localName, koja će imati zadanu vrijednost praznog niza. zato drugi poziv echo daje vrijednost "" za varijablu $localName.

Pristup globalnim varijablama unutar funkcije

Za pristup globalnoj varijabli izvan funkcije Dovoljno je samo napisati njezino ime. Ali za pristup globalnoj varijabli unutar funkcije, prvo morate deklarirati varijablu kao globalnu u funkciji pomoću ključne riječi global:

Funkcija myFunction() ( global $globalVariable; // Pristup globalnoj varijabli $globalVariable)

Ako to ne učinite, PHP pretpostavlja da stvarate ili koristite lokalnu varijablu.

Evo primjera skripte koja koristi globalnu varijablu unutar funkcije:

"; global $globalName; echo "Zdravo $globalName!
"; ) sayHello(); ?>

Kada se izvrši, skripta će ispisati:

Bok Harry! Pozdrav Zoya!

Funkcija sayHello() koristi ključna riječ global za deklariranje varijable $globalName kao globalne. Zatim može pristupiti varijabli i ispisati njezinu vrijednost ("Zoe").

Što su superglobali?

PHP ima poseban skup unaprijed definiranih globalnih nizova koji sadrže različite informacije. Takvi se nizovi nazivaju superglobali, budući da su dostupni s bilo kojeg mjesta u skripti, uključujući interni funkcijski prostor, i ne moraju se definirati korištenjem ključne riječi global.

Ovdje je popis superglobala dostupnih u PHP verziji 5.3:

  • $GLOBALS - popis svih globalnih varijabli u skripti (isključujući superglobale)
  • $_GET - sadrži popis svih polja obrasca koje je preglednik poslao pomoću GET zahtjeva
  • $_POST - sadrži popis svih polja obrasca koje je preglednik poslao pomoću POST zahtjeva
  • $_COOKIE - sadrži popis svih kolačića koje šalje preglednik
  • $_REQUEST - sadrži sve kombinacije ključ/vrijednost koje su sadržane u nizovima $_GET, $_POST, $_COOKIE
  • $_FILES - sadrži popis svih datoteka koje je preuzeo preglednik
  • $_SESSION - omogućuje pohranjivanje i korištenje varijabli sesije za trenutni preglednik
  • $_SERVER - sadrži informacije o poslužitelju, kao što je naziv datoteke skripte koja se izvršava i IP adresa preglednika.
  • $_ENV - sadrži popis varijabli okruženja proslijeđenih PHP-u, kao što su CGI varijable.
Na primjer, možete upotrijebiti $_GET za dobivanje vrijednosti varijabli zatvorenih u nizu URL-a zahtjeva skripte i njihovo prikazivanje na stranici:

Ako pokrenete gornju skriptu koristeći URL http://www.example.com/script.php?yourName=Fred, ona će ispisati:

Pozdrav Fred!

Upozorenje! U pravoj skripti takav se prijenos podataka nikada ne bi trebao koristiti zbog slabe sigurnosti. Uvijek biste trebali potvrditi ili filtrirati podatke.

Superglobal $GLOBALS vrlo je zgodan za korištenje jer vam omogućuje organiziranje pristupa globalnim varijablama u funkciji bez potrebe za ključnom riječi global. Na primjer:

"; ) sayHello(); // Ispisuje "Zdravo, Zoya!" ?>

Statičke varijable: one su tu negdje

Kada stvorite lokalnu varijablu unutar funkcije, ona postoji samo dok je funkcija pokrenuta. Kada funkcija završi, lokalna varijabla nestaje. Kada se funkcija ponovno pozove, stvara se nova lokalna varijabla.

U većini slučajeva ovo izvrsno funkcionira. Dakle, funkcije su samostalne i uvijek rade isto svaki put kada se pozovu.

Međutim, postoje situacije u kojima bi bilo zgodno stvoriti lokalnu varijablu koja "pamti" svoju vrijednost između poziva funkcije. Takva se varijabla naziva statička.

Da biste stvorili statičku varijablu u funkciji, morate upotrijebiti ključnu riječ static prije naziva varijable i svakako joj dati početnu vrijednost. Na primjer:

Funkcija myFunction() ( static $myVariable = 0; )

Razmotrimo situaciju kada je prikladno koristiti statičku varijablu. Recimo da stvorite funkciju koja, kada se pozove, stvara widget i prikazuje broj već stvorenih widgeta. Možete pokušati napisati kod poput ovog koristeći lokalnu varijablu:


"; echo createWidget() . " već smo stvorili.
"; echo createWidget() . " već smo stvorili.>
"; ?>

No, budući da se varijabla $numWidgets kreira svaki put kada se funkcija pozove, dobit ćemo sljedeći rezultat:

Izrađujemo neke widgete... Već smo izradili 1. Već smo kreirali 1. Već smo kreirali 1.

No korištenjem statičke varijable možemo pohraniti vrijednost iz jednog poziva funkcije u drugi:

"; echo createWidget() . " već smo stvorili.
"; echo createWidget() . " već smo stvorili.
"; echo createWidget() . " >već smo stvorili.
"; ?>

Sada će skripta dati očekivani rezultat:

Izrađujemo neke widgete... Već smo izradili 1. Već smo kreirali 2. Već smo kreirali 3.

Iako statička varijabla zadržava svoju vrijednost između poziva funkcije, ona je važeća samo dok se skripta izvodi. Nakon što skripta završi s izvođenjem, sve statičke varijable se uništavaju, kao i lokalne i globalne varijable.

To je sve! Često provjeravajte svoju PHP dokumentaciju.

prije 13 godina

Mali problem na koji treba pripaziti:

Ako isključite RegisterGlobals i srodne, a zatim koristite get_defined_vars(), mogli biste vidjeti nešto poput sljedećeg:

Niz
[ GLOBALI ] => Niz
[ GLOBALI ] => Niz
*REKURZIJA*
[ _POST ] => Array()
[ _GET ] => Array()
[ _COOKIE ] => Array()
[ _FILES ] => Array()
)

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

)
?>

Primijetite da $_SERVER nije tamo. Čini se da php učitava samo superglobalni $_SERVER ako se negdje koristi. Možete učiniti ovo:

ispis"

" . htmlspecialchars(print_r(get_defined_vars(), true))."
" ;
ispis"
" . htmlspecialchars (print_r ($_SERVER , true )) . "
" ;
?>

I tada će se $_SERVER pojaviti na oba popisa. Pretpostavljam da to baš i nije nešto loše, jer se ništa loše neće dogoditi ni u jednom slučaju, ali je svejedno zanimljiva zanimljivost.

prije 6 godina

Budući da get_defined_vars() dobiva samo varijable u trenutku kada pozovete funkciju, postoji jednostavan način da se varijable definiraju unutar trenutnog opsega.

// Sam vrh vaše php skripte
$vars = get_defined_vars();

// Sada radite svoje
$foo = "foo" ;
$bar = "bar" ;

// Dobivanje svih varijabli definiranih u trenutnom opsegu
$vars = array_diff(get_defined_vars(), $vars);

jeka "

"
;
print_r($vars);
jeka "
" ;
?>

prije 15 godina

Ovdje je funkcija koja generira izvješće o otklanjanju pogrešaka za prikaz ili e-poštu
koristeći get_defined_vars. Izvrstan za dobivanje detaljne snimke bez
oslanjajući se na korisnički unos.

funkcija generateDebugReport ($method, $defined_vars, $email = "undefined" )(
// Funkcija za izradu izvješća o otklanjanju pogrešaka za prikaz ili e-poštom.
// Upotreba: generateDebugReport(method,get_defined_vars(),email);
// Gdje je metoda "preglednik" ili "e-pošta".

// Kreirajte popis zanemarivanja za ključeve koje vraća "get_defined_vars".
// Na primjer, HTTP_POST_VARS, HTTP_GET_VARS i drugi jesu
// redundantno (isto kao _POST, _GET)
// Također uključite vars koje želite zanemariti iz sigurnosnih razloga - tj. 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");

$vremenska oznaka = datum ("m/d/g h:m:s");
$message = "Debug report created $timestamp \n" ;

// Dobivanje zadnje SQL pogreške za dobru mjeru, gdje je $link identifikator resursa
// za mysql_connect. Ostavite komentar ili izmijenite za svoju bazu podataka ili postavku apstrakcije.
globalna $link ;
$sql_greška = mysql_greška($link);
if($sql_error )(
$message .= "\nMysql poruke:\n" . mysql_greška($link);
}
// Završi MySQL

// Ovdje se može koristiti rekurzivna funkcija. Shvatili ste ;-)
foreach($defined_vars kao $key => $val )(
if(is_array ($val) && ! in_array ($key, $ignorelist) && count ($val) > 0 )(
$message .= "\n niz $ključeva (ključ=vrijednost):\n" ;
foreach($val kao $subkey => $subval )(
if(! in_array ($subkey, $ignorelist) && ! is_array ($subval))(
$message .= $podključ. " = ". $podval. "\n" ;
}
elseif(! in_array ($subkey, $ignorelist) && is_array ($subval))(
foreach($subval kao $subsubkey => $subsubval )(
if(! in_array ($subsubkey, $ignorelist))(
$message .= $subsubkey . " = ". $podpodval. "\n" ;
}
}
}
}
}
inače ako(!
je_niz ($val) && ! in_array ($key, $ignorelist) && $val)(
$message .= "\nVarijabla " . $ključ . " = ". $val. "\n" ;
}
}

If($method == "preglednik" )(
echo nl2br($poruka);
}
elseif($method == "e-mail" )(
if($email == "undefined" )(
$email = $_SERVER [ "SERVER_ADMIN" ];
}

$mresult = pošta ($email, "Izvješće o otklanjanju pogrešaka za ". $_ENV [ "HOSTNAME"]. "", $message);
if($mresult == 1 )(
jeka "Izvješće o otklanjanju pogrešaka uspješno je poslano.\n";
}
drugo(
jeka "Neuspješno slanje izvješća o otklanjanju pogrešaka.\n";
}
}
}
?>

prije 17 godina

Jednostavna rutina za pretvaranje get_defined_vars objekta u XML.

funkcija obj2xml ($v, $indent = "" ) (
dok je (popis($ključ, $val) = svaki ($v)) (
if ($key == "__attr" ) nastavi;
// Provjerite __attr
if (je_objekt ($val -> __attr)) (
dok (list($key2, $val2) = svaki ($val -> __attr)) (
$attr .= " $key2 =\" $val2 \"" ;
}
}
else $attr = "" ;
if (je_niz ($val) || je_objekt ($val)) (
print(" $uvlaka< $key$attr >\n" );
obj2xml($val, $uvlaka. "");
print(" $uvlaka\n" );
}
else print(" $uvlaka< $key$attr >$val\n" );
}
}

//Primjer objekta
$x -> ime -> prvi = "Ivan" ;
$x -> ime -> prezime = "Smith" ;
$x -> arr [ "Voće" ] = "Banana" ;
$x -> arr [ "Povrće" ] = "Mrkva" ;
$y -> korisnik = $x ;
$y -> kupac -> __attr -> id = "176C4" ;

$z = get_defined_vars();
obj2xml($z["y"]);
?>
će ispisati:


Ivan
Smith


Banana
Mrkva

prije 11 godina

Napomena, get_defined_vars() ne vraća skup referenci varijabli (kao što sam se nadao). Na primjer:

// definirati varijablu
$my_var = "foo" ;

// dobivanje našeg popisa definiranih varijabli
$defined_vars = get_defined_vars();

// sada pokušajte promijeniti vrijednost kroz vraćeni niz
$defined_vars [ "my_var" ] = "bar" ;

echo $my_var , "\n" ;

?>

će ispisati "foo" (izvorna vrijednost). Bilo bi lijepo kada bi get_defined_vars() imao izborni argument da ih napravi referencama, ali pretpostavljam da je to prilično specijaliziran zahtjev. Možete to učiniti sami (manje zgodno) s nečim poput:

$defined_vars = array();
$var_names = array_keys(get_defined_vars());

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

?>

prije 1 godinu

Prije sam ovdje objavio o tome da je "ovo" u get_defined_vars.

Ispostavilo se da nije uvijek tu, ali u određenim slučajevima će se neobjašnjivo pojaviti.

Php -r "
razredni test (
javna funkcija a() (var_dump(array_keys(get_defined_vars()));$a = 123;)
javna funkcija b() (var_dump(array_keys(get_defined_vars()));$this;)
}
$t = novi test();
$t->a();
$t->b();
"

Niz()
niz("ovo")

Ovo se ne događa u PHP 7.2, ali će se dogoditi u PHP 5.6.

prije 1 godinu

Neki komentari ovdje ističu da ova funkcija neće vratiti reference. Međutim, vraća imena, a imena su "reference".

Ovdje ne bih preporučio prijedloge koji to pretvaraju u reference.

Javna funkcija x($a, $b, $c) (
foreach(array_keys(get_defined_vars()) kao $key)
if($key !== "ovo")
$ovo->y($($ključ));
}

Javna funkcija y(&$input) (
$input++;
}

Umjesto $() možete koristiti i $$.

Radio sam neke čudne stvari u svoje vrijeme kako bih napravio krajnje generički kod, ali nikada nisam morao učiniti nešto poput gore navedenog. Možda čak i ne bi uspjelo (ali trebalo bi jer se ne razlikuje od $a[$key]).

Mogli biste napraviti i $$key++, ali nikad nisam vidio takav kod koji nije bio užasno loš (upotreba dinamike tamo gdje dinamika nije korisna).

Ako radite tako nešto, onda to dodatno proučite.



reci prijateljima