Kako prikazati vrijednosti svih varijabli okruženja u Windowsu. Varijable u PHP-u Provjera vrijednosti varijable

Dom / Tehnologije

Sigurno kod kuće imate ormar ili komodu. Princip njihove upotrebe je jednostavan: tamo stavljamo stvari koje nam trenutno nisu potrebne, ali će nam zatrebati nakon nekog vremena.

Varijable su raspoređene potpuno isto. Možete staviti neku vrijednost u njih i pohraniti je tamo dok vam ne zatreba.

Kreiranje varijabli

Možete staviti vrijednost u varijablu ovako:

U kodu iznad, kreirali smo varijablu $name i stavili vrijednost Ivan u nju, zatim smo kreirali varijablu $age i dodijelili joj vrijednost 20.

Naziv "varijable" znači da se njena vrijednost može promijeniti tokom izvršavanja skripte:

U nekim jezicima varijabla se prvo mora „deklarisati“, a zatim koristiti. U PHP-u ne postoji deklaracija - varijabla se kreira u trenutku kada u nju unesete vrijednost.
Međutim, PHP programeri često kažu "deklariraj varijablu" umjesto "kreiraj varijablu".

Također, umjesto „stavite vrijednost u varijablu“, često kažu „dodijelite vrijednost“.
Razlog je jednostavan - simbol =, zahvaljujući kojem pohranjujemo vrijednost u varijablu, naziva se "operator dodjeljivanja". Otuda i termin "prikladan".

Pravila imenovanja varijabli

1. Ime varijable počinje simbolom $.

2. Drugi znak može biti slovo ili donja crta _

Imena varijabli razlikuju velika i mala slova. $name i $Name su različite varijable.

Prikaz vrijednosti varijable na ekranu

Možete prikazati varijablu koristeći naredbu echo koju već poznajemo:

Komanda echo vam omogućava da prikažete više vrijednosti odjednom:

Primijetite da smo proslijedili 2 vrijednosti u echo, odvojene zarezom. Na ovaj način možemo prenijeti onoliko vrijednosti koliko želimo. Sljedeća dva primjera će dati isti rezultat:

Postoji i skraćena sintaksa za prikaz varijabli u PHP-u. Umjesto

Prije PHP 5.4, skraćena sintaksa je radila samo kada je uključena PHP postavke short_open_tag direktiva, koja takođe dozvoljava upotrebu skraćene početne oznake

Provjera vrijednosti varijable

Komanda echo nije uvijek zgodna za provjeru trenutne vrijednosti varijable. Na primjer, ako pokušate prikazati prazan niz "", apsolutno ništa neće biti prikazano na ekranu. I nije jasno šta je razlog - prazna varijabla ili pokvareni kod.

Stoga se za provjeru vrijednosti varijable koristi funkcija var_dump():

Rezultat izvršenja skripte:

String(5) "Vasya" string(0) ""

Kao što vidite, PHP je prikazao ne samo sadržaj varijable, već i broj znakova, pa čak i tip varijable (string). Detaljno ćemo razmotriti tipove podataka u sljedećim lekcijama.

Uklanjanje varijabli

Možete ukloniti postojeću varijablu koristeći unset() funkciju:

Sada je vrijeme da malo vježbamo.

Zapamtite, skoro svaki PHP problem može imati više rješenja. Stoga, ako se vaša rješenja razlikuju od onih napisanih na ovoj stranici, to uopće ne znači da ste nešto pogriješili.

Napišite skriptu koja:
1. Kreira varijable s imenima naslov i sadržaj i neke vrijednosti.
2. Prikazuje vrijednost varijable title unutar oznake h1 i vrijednost varijable sadržaja unutar div oznake.

Pokaži rješenje

", $title, ""; eho"

", $content, "
"; ?>

Još jednom bih vam skrenuo pažnju da ova odluka nije jedina ispravna. Na primjer, sljedeći kod će dati isti rezultat:

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

Kako napraviti 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žati brojevi. Također je moguće koristiti donju crtu u naslovu (ne na kraju).

Kako možete imenovati varijable:

$var
$varijable
$year1945
$_varijable
Kako ne imenovati varijable:

$1 - sastoji se samo od brojeva
$1var - ne možete započeti ime varijable brojem
$/var - od dodatnih znakova, dozvoljena je samo donja crta _
$varijable - ćirilica je dozvoljena u PHP dokumentaciji, ali se ne preporučuje
$var iable - razmaci se ne mogu koristiti

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

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

$name = "Aleksandar";
$Name = "Aleksej";
echo "$name, $Name"; // će ispisati "Aleksandar, Aleksej"
?>

Štampanje PHP varijabli

Odvojeno, trebali biste pogledati kako prikazati varijable koristeći izlazne izjave, čiji smo rad ispitali u prošloj lekciji Kreiranje PHP stranice. Operatori zaključivanja. . U nastavku ću dati niz ilustrativnih primjera s komentarima.

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

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

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

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

Echo<<Ovo koristi sintaksu "ovdje dokument" za izlaz
nekoliko redova sa zamjenom varijable $varijable.
END;

Operacije sa PHP varijablama

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

-$a(negacija) Promijenite predznak $a.
$a + $b(sabiranje) Zbir $a i $b.
$a - $b(oduzimanje) Razlika $a i $b.
$a * $b(množenje) Proizvod $a i $b.
$a / $b(podjela) Količnik od $a podijeljen sa $b.
$a % $b(modulo dijeljenje) Cjelobrojni ostatak kada se $a podijeli sa $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 $result; // će ispisati 5

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

Operacije povećanja i smanjenja u PHP-u
Ove operacije će biti korisne uglavnom kod konstruisanja ciklusa, o čemu ćemo govoriti nešto kasnije.
Prefiks- operatori napisani PRIJE varijable ( --$a; +$a). Vrati vrijednost varijable prije promjena.
Postfix- operatori napisani nakon varijable ( $a--; $a--). Vrati vrijednost varijable s promjenama.
Povećanje- povećanje vrijednosti.
Dekrement- smanjenje vrijednosti.

+$a Prirast prefiksa. Povećava $a za jedan i vraća vrijednost $a.
$a++ Postfix 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.
eho"

Postfix inkrement

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

odjek"

Prirast prefiksa

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

odjek"

Postfiksni dekrement

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

odjek"

Dekrement prefiksa

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

Operacije dodjele u PHP-u
Osnovni operater izgleda kao = . Na prvi pogled može izgledati da je ovo operator jednakosti. Zapravo to nije istina. U stvari, operator dodjeljivanja znači da lijevi operand preuzima vrijednost desnog izraza (to jest, postavlja ga rezultujuća vrijednost). Kombinirani operateri- ovo su operatori koji vam omogućavaju da koristite prethodne vrijednosti varijabli za naredne operacije (dodavanje varijabli niza (sa tekstom) ili dodavanje numeričkih vrijednosti).

$a = ($b = 2) + 4; // rezultat: $a je postavljena na 6, varijabla $b je dodijeljena 2.

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

Postoje također operacije poređenja I logicno, ali o njima ćemo govoriti u narednim lekcijama. Pokušaću da vas odmah ne uplašim velikom količinom informacija!)

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 kreirati statičke varijable.

Kada počnete da učite PHP i počnete da radite sa funkcijama i objektima, opseg varijable je pomalo zbunjujući. Na sreću, PHP-ova pravila u ovom pogledu su veoma laka za razumevanje (u poređenju sa drugim programskim jezicima).

Šta je opseg?

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

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

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

Varijable sa globalno područje vidljivost se naziva globalna, a sa lokalnim opsegom - lokalna.

Evo primjera kako funkcioniraju globalne i lokalne varijable.

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

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

U ovoj skripti kreirali smo dvije varijable:

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

Nakon kreiranja varijable i funkcije, skripta poziva sayHello(), koja ispisuje "Halo Harry!" . Skripta zatim pokušava ispisati vrijednosti dvije varijable koristeći echo funkciju. Evo šta se dešava:

  • Jer $globalName je kreiran izvan funkcije, dostupan je bilo gdje u skripti, tako da je "Zoe" izlaz.
  • $localName biće dostupan samo unutar funkcije sayHello(). Pošto je echo izraz izvan funkcije, PHP ne pruža pristup lokalnoj varijabli. Umjesto toga, PHP očekuje da kod kreira novu varijablu pod nazivom $localName, koja će imati zadanu vrijednost praznog niza. zato drugi poziv echo-a daje vrijednost "" za varijablu $localName.

Pristup globalnim varijablama unutar funkcije

Za pristup globalnoj varijabli van funkcije Dovoljno je samo napisati njeno ime. Ali za pristup globalnoj varijabli unutar funkcije, prvo morate deklarirati varijablu kao globalnu u funkciji koristeći globalnu ključnu riječ:

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

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

Evo primjera skripte koja koristi globalnu varijablu unutar funkcije:

"; globalno $globalName; echo "Zdravo $globalName!
"; ) reciHello(); ?>

Kada se izvrši, skripta će ispisati:

Zdravo Harry! Zdravo Zoya!

SayHello() funkcija koristi globalnu ključnu riječ da proglasi varijablu $globalName globalnom. Ona tada može pristupiti varijabli i ispisati njenu vrijednost (“Zoe”).

Šta su superglobali?

PHP ima poseban skup unapred definisanih globalnih nizova koji sadrže različite informacije. Takvi nizovi se nazivaju superglobali, budući da im se može pristupiti s bilo kojeg mjesta u skripti, uključujući interni funkcijski prostor, i ne moraju biti definirani korištenjem globalne ključne riječi.

Evo liste superglobala dostupnih u PHP verziji 5.3:

  • $GLOBALS - lista svih globalnih varijabli u skripti (isključujući superglobalne)
  • $_GET - sadrži listu svih polja obrasca koje je pretraživač dostavio koristeći GET zahtjev
  • $_POST - sadrži listu svih polja obrasca koje pretraživač šalje pomoću POST zahtjeva
  • $_COOKIE - sadrži listu svih kolačića koje šalje pretraživač
  • $_REQUEST - sadrži sve kombinacije ključ/vrijednost koje se nalaze u nizovima $_GET, $_POST, $_COOKIE
  • $_FILES - sadrži listu svih fajlova koje je preuzeo pretraživač
  • $_SESSION - omogućava vam da pohranite i koristite varijable sesije za trenutni pretraživač
  • $_SERVER - sadrži informacije o serveru, kao što je naziv datoteke skripte koja se izvršava i IP adresa pretraživača.
  • $_ENV - sadrži listu varijabli okruženja koje je proslijedio PHP, kao što su CGI varijable.
Na primjer, možete koristiti $_GET da dobijete vrijednosti varijabli zatvorenih u URL nizu zahtjeva skripte i prikažete ih na stranici:

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

Hello Fred!

Upozorenje! U pravoj skripti, takav prijenos podataka nikada ne bi trebao biti korišten zbog slabe sigurnosti. Uvijek trebate provjeriti ili filtrirati podatke.

Superglobalni $GLOBALS je vrlo zgodan za korištenje jer vam omogućava da organizirate pristup globalnim varijablama u funkciji bez potrebe za globalnom ključnom riječi. na primjer:

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

Statičke varijable: one su negdje u blizini

Kada kreirate lokalnu varijablu unutar funkcije, ona postoji samo dok je funkcija pokrenuta. Kada se funkcija završi, lokalna varijabla nestaje. Kada se funkcija ponovo pozove, kreira se nova lokalna varijabla.

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

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

Da biste kreirali statičku varijablu u funkciji, morate koristiti ključnu riječ static prije imena varijable i obavezno joj dati početnu vrijednost. na primjer:

Funkcija myFunction() (statička $myVariable = 0;)

Razmotrimo situaciju kada je zgodno koristiti statičku varijablu. Recimo da kreirate funkciju koja, kada se pozove, kreira widget i prikazuje broj već kreiranih widgeta. Možete pokušati napisati ovakav kod koristeći lokalnu varijablu:


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

Ali, pošto se varijabla $numWidgets kreira svaki put kada se funkcija pozove, dobit ćemo sljedeći rezultat:

Kreiramo neke vidžete... Već smo kreirali 1. Već smo kreirali 1. Već smo kreirali 1.

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

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

Sada će skripta proizvesti očekivani rezultat:

Kreiramo neke vidžete... Već smo kreirali 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 je skripta pokrenuta. Kada skripta završi izvršavanje, sve statičke varijable se uništavaju, kao i lokalne i globalne varijable.

To je to! Često pogledajte vašu PHP dokumentaciju.

prije 13 godina

Malo treba pripaziti:

Ako isključite RegisterGlobals i povezane, zatim koristite get_defined_vars(), možda ćete vidjeti nešto poput sljedećeg:

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

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

)
?>

Primijetite da $_SERVER ne postoji. Čini se da php samo učitava superglobalni $_SERVER ako se negdje koristi.

print "

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

I tada će se $_SERVER pojaviti na obje liste. Pretpostavljam da to baš i nije problem, jer se ništa loše neće dogoditi u svakom slučaju, ali je ipak zanimljiva radoznalost.

prije 6 godina

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

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

// Sada radi svoje stvari
$foo = "foo" ;
$bar = "bar" ;

// Dobivamo sve varijable definirane u trenutnom opsegu
$vars = array_diff(get_defined_vars(), $vars);

eho"

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

prije 15 godina

Evo funkcije koja generiše izvještaj o otklanjanju grešaka za prikaz ili e-poštu
koristeći get_defined_vars. Odlično za dobijanje detaljnog snimka bez
oslanjajući se na unos korisnika.

funkcija generateDebugReport ($method, $defined_vars, $email = "nedefinirano")(
// Funkcija za kreiranje izvještaja o otklanjanju grešaka za prikaz ili e-poštom.
// Upotreba: generateDebugReport(method,get_defined_vars(),email);
// Gdje je metoda "browser" ili "email".

// Kreirajte listu ignoriranja za ključeve koje vraća "get_defined_vars".
// Na primjer, HTTP_POST_VARS, HTTP_GET_VARS i drugi su
// 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" );

$timestamp = datum ("m/d/y h:m:s" );
$message = "Izvještaj o otklanjanju grešaka kreiran $timestamp \n" ;

// Dobivamo posljednju SQL grešku za dobru mjeru, gdje je $link identifikator resursa
// za mysql_connect. Komentirajte ili modificirajte za vašu bazu podataka ili postavke apstrakcije.
globalni $link ;
$sql_error = mysql_error($link);
if($sql_error )(
$message .= "\nMysql poruke:\n" . mysql_error($link);
}
//End MySQL

// Ovdje se može koristiti rekurzivna funkcija. Shvatili ste ideju ;-)
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 .= $potključ. " = " . $subval. "\n" ;
}
elseif(! in_array ($subkey, $ignorelist) && is_array ($subval ))(
foreach($subval kao $subkey => $subval )(
if(! in_array ($subkey, $ignorelist))(
$message .= $subključ. " = " . $subsubval . "\n" ;
}
}
}
}
}
elseif(!
is_array ($val ) && ! in_array ($key, $ignorelist) && $val )(
$message .= "\nVarijabla " . $key . " = " . $val. "\n" ;
}
}

If($method == "preglednik" )(
echo nl2br($message);
}
elseif($method == "e-pošta" )(
if($email == "nedefinisano" )(
$email = $_SERVER [ "SERVER_ADMIN" ];
}

$mresult = mail ($email , "Izvještaj o otklanjanju grešaka za " . $_ENV [ "HOSTNAME" ]. "" , $message );
if($mresult == 1 )(
echo "Izvještaj o otklanjanju grešaka je uspješno poslan.\n";
}
drugo(
echo "Slanje izvještaja o otklanjanju grešaka nije uspjelo.\n";
}
}
}
?>

prije 17 godina

Jednostavna rutina za pretvaranje get_defined_vars objekta u XML.

funkcija obj2xml ($v, $indent = "" ) (
dok (list($key, $val) = svaki ($v)) (
if ($key == "__attr" ) nastavi;
// Provjera __attr
if (is_object ($val -> __attr)) (
while (list($key2, $val2) = svaki ($val -> __attr)) (
$attr .= " $key2 =\" $val2 \"" ;
}
}
else $attr = "" ;
if (is_array ($val) || is_object ($val)) (
print(" $indent< $key$attr >\n" );
obj2xml($val, $indent. "");
print(" $indent\n" );
}
else print(" $indent< $key$attr >$val\n" );
}
}

//Primjer objekta
$x -> ime -> first = "Jovan" ;
$x -> ime -> last = "Smith" ;
$x -> arr [ "Voće" ] = "Banana" ;
$x -> arr [ "Veg" ] = "Šargarepa" ;
$y -> kupac = $x;
$y -> kupac -> __attr -> id = "176C4" ;

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


John
Smith


Banana
Šargarepa

prije 11 godina

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

// definiramo varijablu
$my_var = "foo" ;

// dobijemo našu listu 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" (originalna vrijednost). Bilo bi lijepo kada bi get_defined_vars() imao opcioni argument da ih referencira, ali pretpostavljam da je to prilično specijaliziran zahtjev. Možete to učiniti sami (manje povoljnije) s nečim poput:

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

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

?>

prije 1 godine

Već sam ovdje pisao o tome da je "ovo" u get_defined_vars.

Ispostavilo se da nije uvijek tu, ali će se u određenim slučajevima 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 dešava u PHP 7.2, ali će se desiti u PHP 5.6.

prije 1 godine

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

Ne bih preporučio prijedloge ovdje koji to pretvaraju u reference.

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

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

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

Uradio sam neke lude stvari u svoje vrijeme da napravim izuzetno generički kod, ali nikada nisam morao da radim ništa slično gore navedenom. Možda čak i neće raditi (ali bi trebalo pošto se ne razlikuje od $a[$key]).

Mogli biste i $$key++, ali nikada nisam vidio kod poput onog koji nije bio užasno loš (koristeći dinamiku gdje dinamika nije korisna).

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

prije 13 godina

Malo treba pripaziti:

Ako isključite RegisterGlobals i povezane, zatim koristite get_defined_vars(), možda ćete vidjeti nešto poput sljedećeg:

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

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

)
?>

Primijetite da $_SERVER ne postoji. Čini se da php samo učitava superglobalni $_SERVER ako se negdje koristi.

print "

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

I tada će se $_SERVER pojaviti na obje liste. Pretpostavljam da to baš i nije problem, jer se ništa loše neće dogoditi u svakom slučaju, ali je ipak zanimljiva radoznalost.

prije 6 godina

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

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

// Sada radi svoje stvari
$foo = "foo" ;
$bar = "bar" ;

// Dobivamo sve varijable definirane u trenutnom opsegu
$vars = array_diff(get_defined_vars(), $vars);

eho"

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

prije 15 godina

Evo funkcije koja generiše izvještaj o otklanjanju grešaka za prikaz ili e-poštu
koristeći get_defined_vars. Odlično za dobijanje detaljnog snimka bez
oslanjajući se na unos korisnika.

funkcija generateDebugReport ($method, $defined_vars, $email = "nedefinirano")(
// Funkcija za kreiranje izvještaja o otklanjanju grešaka za prikaz ili e-poštom.
// Upotreba: generateDebugReport(method,get_defined_vars(),email);
// Gdje je metoda "browser" ili "email".

// Kreirajte listu ignoriranja za ključeve koje vraća "get_defined_vars".
// Na primjer, HTTP_POST_VARS, HTTP_GET_VARS i drugi su
// 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" );

$timestamp = datum ("m/d/y h:m:s" );
$message = "Izvještaj o otklanjanju grešaka kreiran $timestamp \n" ;

// Dobivamo posljednju SQL grešku za dobru mjeru, gdje je $link identifikator resursa
// za mysql_connect. Komentirajte ili modificirajte za vašu bazu podataka ili postavke apstrakcije.
globalni $link ;
$sql_error = mysql_error($link);
if($sql_error )(
$message .= "\nMysql poruke:\n" . mysql_error($link);
}
//End MySQL

// Ovdje se može koristiti rekurzivna funkcija. Shvatili ste ideju ;-)
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 .= $potključ. " = " . $subval. "\n" ;
}
elseif(! in_array ($subkey, $ignorelist) && is_array ($subval ))(
foreach($subval kao $subkey => $subval )(
if(! in_array ($subkey, $ignorelist))(
$message .= $subključ. " = " . $subsubval . "\n" ;
}
}
}
}
}
elseif(!
is_array ($val ) && ! in_array ($key, $ignorelist) && $val )(
$message .= "\nVarijabla " . $key . " = " . $val. "\n" ;
}
}

If($method == "preglednik" )(
echo nl2br($message);
}
elseif($method == "e-pošta" )(
if($email == "nedefinisano" )(
$email = $_SERVER [ "SERVER_ADMIN" ];
}

$mresult = mail ($email , "Izvještaj o otklanjanju grešaka za " . $_ENV [ "HOSTNAME" ]. "" , $message );
if($mresult == 1 )(
echo "Izvještaj o otklanjanju grešaka je uspješno poslan.\n";
}
drugo(
echo "Slanje izvještaja o otklanjanju grešaka nije uspjelo.\n";
}
}
}
?>

prije 17 godina

Jednostavna rutina za pretvaranje get_defined_vars objekta u XML.

funkcija obj2xml ($v, $indent = "" ) (
dok (list($key, $val) = svaki ($v)) (
if ($key == "__attr" ) nastavi;
// Provjera __attr
if (is_object ($val -> __attr)) (
while (list($key2, $val2) = svaki ($val -> __attr)) (
$attr .= " $key2 =\" $val2 \"" ;
}
}
else $attr = "" ;
if (is_array ($val) || is_object ($val)) (
print(" $indent< $key$attr >\n" );
obj2xml($val, $indent. "");
print(" $indent\n" );
}
else print(" $indent< $key$attr >$val\n" );
}
}

//Primjer objekta
$x -> ime -> first = "Jovan" ;
$x -> ime -> last = "Smith" ;
$x -> arr [ "Voće" ] = "Banana" ;
$x -> arr [ "Veg" ] = "Šargarepa" ;
$y -> kupac = $x;
$y -> kupac -> __attr -> id = "176C4" ;

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


John
Smith


Banana
Šargarepa

prije 11 godina

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

// definiramo varijablu
$my_var = "foo" ;

// dobijemo našu listu 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" (originalna vrijednost). Bilo bi lijepo kada bi get_defined_vars() imao opcioni argument da ih referencira, ali pretpostavljam da je to prilično specijaliziran zahtjev. Možete to učiniti sami (manje povoljnije) s nečim poput:

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

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

?>

prije 1 godine

Već sam ovdje pisao o tome da je "ovo" u get_defined_vars.

Ispostavilo se da nije uvijek tu, ali će se u određenim slučajevima 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 dešava u PHP 7.2, ali će se desiti u PHP 5.6.

prije 1 godine

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

Ne bih preporučio prijedloge ovdje koji to pretvaraju u reference.

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

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

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

Uradio sam neke lude stvari u svoje vrijeme da napravim izuzetno generički kod, ali nikada nisam morao da radim ništa slično gore navedenom. Možda čak i neće raditi (ali bi trebalo pošto se ne razlikuje od $a[$key]).

Mogli biste i $$key++, ali nikada nisam vidio kod poput onog koji nije bio užasno loš (koristeći dinamiku gdje dinamika nije korisna).

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

© 2024 ermake.ru -- O popravci računara - Informativni portal