Php sve varijable. Varijable u PHP -u

Php varijable je vrsta spremnika informacija koji može sadržavati različite vrste podataka (tekst, brojeve, nizove itd.). Općenito, varijable vam omogućuju stvaranje, pohranu, izmjenu i u budućnosti brz pristup informacijama navedenim u njima.

Kako stvoriti varijablu u PHP -u

U početku, varijable sadrže znak $ (dolar) - oznaka upotrebe varijable, zatim slova Latinska abeceda(od a do z i mali i veliki), na kraju može sadržavati brojevi... Također, imenu je dopušteno koristiti donju crtu (ne na kraju).

Kako možete imenovati varijable:

$ var
$ varijabla
1945. dolara
$ _variable
Kako se varijable ne mogu nazvati:

$ 1 - sastoji se samo od znamenke
$ 1var - ne možete započeti naziv varijable cifrom
$ / var - dopunski znakovi dopušteni su samo podvlakama _
$ varijabla - ćirilica je dozvoljena php dokumentacijom, ali se ne preporučuje
$ promenljivo - razmaci se ne mogu koristiti

Svakoj varijabli se dodjeljuje vrijednost. Za dodjelu vrijednosti upotrijebite znak = (jednako). Tokom obrade skripte, vrijednost varijable se može mijenjati više puta u zavisnosti od različitih uslova.

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

$ name = "Alexander";
$ Name = "Alexey";
echo "$ name, $ Name"; // prikazuje "Alexander, Alexey"
?>

PHP promenljivi izlaz

Odvojeno, trebali biste razmotriti kako prikazati varijable koristeći izlazni operatori, o čijem smo radu govorili u prošloj lekciji, Kreiranje PHP stranice. Izlazni operatori. ... Ispod je nekoliko ilustrativnih primjera s komentarima.

// Ovako dodjeljujemo vrijednosti varijablama
$ name1 = "Aleksej";
$ name2 = "Aleksandar";

// Prikaz varijabli
echo $ name2; // Ishod: Alexander
echo "name1 je $ name1"; // ime1 je Alexey

// Kada koristite pojedinačne navodnike, izlaz je
// ime varijable, a ne vrijednost
echo "name1 je $ name1"; // ispisuje: name1 je $ name1

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

Echo<<Ovo koristi sintaksu "here document" za izlaz
više redova sa zamjenom $ varijabla.
END;

PHP varijabilne operacije

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

- $ a(negacija) Promijenite znak $ a.
$ a + $ b(dodatak) Zbir $ a i $ b.
$ a - $ b(oduzimanje) Razlika između $ a i $ b.
$ a * $ b(množenje) Proizvod $ a i $ b.
$ a / $ b(podjela) količnik $ a podijeljen sa $ b.
$ a% $ b(modularna podjela) Cijeli ostatak $ a podijeljen sa $ b.
Pogledajmo primjere

$ a = 2; // napomena, u slučaju brojeva, navodnici se ne koriste
$ b = 3; // napomena, u slučaju brojeva, navodnici se ne koriste

$ rezultat = $ a + $ b; // dodavanje varijabli
echo $ rezultat; // ispisat će se 5

$ rezultat = $ b - $ a; // dodavanje varijabli
echo $ rezultat; // ispisat će 1

Operacije povećanja i smanjivanja u PHP -u
Ove operacije bit će korisne uglavnom pri izgradnji petlji, o čemu ćemo govoriti kasnije.
Prefiks- operatori napisani PRIJE varijable ( - $ a; ++ $ a). Vraća vrijednost varijable prije promjene.
Postfix- operatori napisani iza varijable ( $ a--; $ a--). Vraća izmijenjenu vrijednost varijable.
Inkrement- povećanje vrijednosti.
Decrement- smanjenje vrijednosti.

++ $ a Povećanje prefiksa. Povećava $ a za jedan i vraća $ a.
$ a ++ Postfix dodatak. Vraća vrijednost $ a, a zatim povećava $ a za jedan.
- $ a Umanjivanje prefiksa. Smanjuje $ a za jedan i vraća vrijednost $ a.
$ a-- Postfix decrement. Vraća vrijednost $ a, a zatim smanjuje $ a za jedan.
odjek "

Postfix dodatak

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

Eho "

Povećanje prefiksa

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

Eho "

Postfix decrement

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

Eho "

Umanjivanje prefiksa

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

Operacije dodjeljivanja PHP -a
Osnovni operater izgleda kao = ... Na prvi pogled može se činiti da je ovaj operator jednak. Zapravo, to nije tako. U stvari, operator dodjeljivanja znači da je lijevi operand postavljen na vrijednost desnog izraza (tj. Postavljen rezultirajućom vrijednošću). Kombinovani operatori- ovo su operatori koji vam omogućavaju da koristite prethodne 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, $ b je postavljeno na 2.

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

Postoje takođe uporedne operacije i mozgalica, ali o njima ćemo govoriti u sljedećim lekcijama. Pokušat ću vas odmah ne uplašiti velikom količinom informacija!)

Ova lekcija istražuje opseg PHP varijabli. Objašnjava razliku između lokalnog i globalnog opsega, pokazuje kako pristupiti globalnim varijablama unutar funkcije, kako raditi sa superglobalima i kako stvoriti statičke varijable.

Kad počnete učiti PHP i počnete raditi s funkcijama i objektima, opseg varijabli je pomalo zbunjujući. Srećom, PHP -ova pravila u tom pogledu su vrlo laka za razumevanje (u poređenju sa drugim programskim jezicima).

Šta je opseg?

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

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

Promenljivi opseg, a posebno lokalni opseg, znatno olakšava upravljanje vašim kodom. Da su sve varijable globalne, onda bi se mogle promijeniti bilo gdje u skripti. To bi dovelo do kaosa i velikih skripti, jer vrlo često različiti dijelovi skripte koriste varijable sa istim imenom. Opsegom lokalnog konteksta definirate granice koda koji može pristupiti varijabli, čineći ga robusnijim, modularnijim i lakšim za otklanjanje grešaka.

Varijable s globalnim opsegom nazivaju se globalne, a one s lokalnim opsegom nazivaju se lokalnim.

Evo primjera kako globalne i lokalne varijable funkcioniraju.

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

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

U ovoj skripti smo stvorili dvije varijable:

  • $ globalName- ovo je globalno varijabilna
  • $ localName- ovo je lokalno varijabla koja je kreirana unutar funkcije sayHello ().

Nakon stvaranja varijable i funkcije, skripta poziva sayHello (), koji emituje "Hello Harry!" ... Skripta zatim pokušava ponoviti vrijednosti dviju varijabli. Evo šta se dešava:

  • Jer $ globalName je kreiran izvan funkcije, dostupan je bilo gdje u skripti, pa se prikazuje "Zoya".
  • $ localName bit će dostupna samo unutar funkcije sayHello (). Budući da je echo izraz izvan funkcije, PHP ne dozvoljava pristup lokalnoj varijabli. Umjesto toga, PHP pretpostavlja da će kôd stvoriti novu varijablu pod nazivom $ localName, koja će primiti zadanu vrijednost praznog niza. ovo je razlog zašto drugi poziv za echo ispisuje vrijednost "" za varijablu $ localName.

Pristup globalnim varijablama unutar funkcije

Za pristup globalnoj varijabli van funkcije samo napiši njeno ime. Ali za pristup globalnoj varijabli unutrašnja funkcija, prvo morate deklarirati varijablu kao globalnu u funkciji koristeći globalnu ključnu riječ:

Funkcija myFunction () (globalno $ 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:

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

Kada se izvrši, skripta će prikazati:

Zdravo Harry! Hi Zoya!

Funkcija sayHello () koristi globalnu ključnu riječ za deklaraciju varijable $ globalName kao globalnu. Tada može pristupiti varijabli i prikazati njenu vrijednost ("Zoya").

Šta su superglobali?

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

Evo popisa supergloblasa dostupnih u PHP 5.3:

  • $ GLOBALS - popis svih globalnih varijabli u skripti (isključujući superglobale)
  • $ _GET - Sadrži listu svih polja obrazaca koje je pregledač poslao koristeći GET zahtev
  • $ _POST - sadrži listu svih polja obrazaca koje je pregledač poslao koristeći POST zahtev
  • $ _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 listu svih datoteka koje učitava pretraživač
  • $ _SESSION - omogućava vam da skladištite i koristite promenljive sesije za trenutni pregledač
  • $ _SERVER - sadrži informacije o serveru, kao što su naziv datoteke skripte koja se izvršava i IP adresa pretraživača.
  • $ _ENV - Sadrži popis varijabli okruženja proslijeđenih PHP -u, na primjer CGI varijable.
Na primjer, možete koristiti $ _GET za dobivanje vrijednosti varijabli zatvorenih u URL nizu zahtjeva skripte i njihovo prikazivanje na stranici:

Ako pokrenete gornju skriptu s nizom URL -a http://www.example.com/script.php?vašeNaime=Fred, ispisat će se:

Zdravo Fred!

Upozorenje! U pravoj skripti nikada ne biste trebali koristiti takav prijenos podataka zbog slabe sigurnosti. Uvijek biste trebali provjeriti ili filtrirati svoje podatke.

$ GLOBALS superglobal je vrlo zgodan za upotrebu jer vam omogućuje da organizirate pristup globalnim varijablama u funkciji bez potrebe za korištenjem globalne ključne riječi. Na primjer:

";) sayHello (); // Ispisuje" Hello, Zoe! "?>

Statičke promenljive: one su negde 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 ponovno pozove, kreira se nova lokalna varijabla.

Ovo odlično funkcionira u većini slučajeva. Na ovaj način 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" njezinu vrijednost između poziva funkcije. Takva varijabla se naziva statička.

Da biste stvorili statičku varijablu u funkciji, morate koristiti statičku ključnu riječ ispred imena varijable i svakako joj dati početnu vrijednost. Na primjer:

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

Razmotrimo situaciju kada je prikladno koristiti statičku varijablu. Recimo da kreirate funkciju koja, kada se pozove, stvara widget i prikazuje broj već stvorenih widgeta. Možete pokušati napisati ovakav kod pomoću lokalne varijable:


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

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

Kreiramo neke widgete ... 1 koje smo već kreirali. 1 koji smo već kreirali. 1 koji smo već kreirali.

No, pomoću statičke varijable možemo pohraniti vrijednost iz jednog poziva funkcije u sljedeći:

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

Skripta će sada proizvesti očekivani izlaz:

Kreiramo neke widgete ... 1 koje smo već kreirali. 2 koje smo već kreirali. 3 koje smo već stvorili.

Iako statička varijabla zadržava svoju vrijednost između poziva funkcije, ona je važeća samo u vrijeme izvođenja skripte. Čim skripta završi sa izvršavanjem, sve statičke varijable se uništavaju, kao i lokalne i globalne varijable.

To je sve! Često proveravajte PHP dokumentaciju.

Varijable okruženja (okruženje) u sistemu Windows sadrže različite informacije o postavkama sistema i korisničkom okruženju. Razlikovati varijable korisničkog, sistemskog i procesnog okruženja.

Najlakši način za pregled sadržaja varijabli okruženja u sustavu Windows je otvaranje svojstava sistema ( sysdm.cpl) -> Napredno -> Varijable okruženja. Kao što vidite, u otvorenom odjeljku postoje dva odjeljka: gornji sadrži varijable okruženja korisnika, donji sadrži sistemske.

Osim toga, varijable okruženja se pohranjuju u sistemski registar. Prilagođene varijable su pohranjene u odjeljku. Sistem - unutra HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment.

Vrijednosti svih varijabli okruženja možete prikazati u Windows naredbenoj liniji. Naredba je jednostavna:

Naredba će navesti varijable okruženja i njihove vrijednosti.

U PowerShellu možete koristiti naredbu za prikaz svih varijabli okruženja:

Ako želite prikazati vrijednost samo jedne varijable, morate koristiti naredbu echo, a naziv varijable mora biti zatvoren u znakove postotka. Na primjer,

Echo% systemroot%

set> c: \ tmp \ env_var.txt

Varijable okruženja određenog procesa mogu se dobiti pomoću besplatnog programa Uslužni programi Process Explorer(iz Sysinternalsa). Dovoljno je otvoriti svojstva procesa i otići na karticu Okoliš.

Prije 13 godina

Malo stvari na koje treba paziti:

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

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

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

)
?>

Primijetite da $ _SERVER ne postoji. Čini se da php učitava superglobalni $ _SERVER samo ako se negdje koristi. Možete to učiniti:

štampa "

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

Zatim ć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 zanimljiv kuriozitet.

Prije 6 godina

Budući da get_defined_vars () dobiva samo varijable na mjestu gdje pozivate funkciju, postoji jednostavan način za dobivanje varijabli definiranih 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);

odjek "

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

Prije 15 godina

Ovdje je funkcija koja generira izvještaj o otklanjanju grešaka za prikaz ili e -poštu
koristeći get_defined_vars. Odlično za dobivanje detaljnog snimka bez
oslanjajući se na unos korisnika.

funkcija generatedDebugReport ($ metoda, $ defined_vars, $ email = "undefined") (
// Funkcija za kreiranje izvještaja o otklanjanju grešaka za prikaz ili e -poštu.
// Upotreba: generatedDebugReport (metoda, get_defined_vars (), e -pošta);
// Gdje je metoda "preglednik" ili "e -pošta".

// Kreiramo listu zanemarivanja ključeva koje vraća "get_defined_vars".
// Na primjer, HTTP_POST_VARS, HTTP_GET_VARS i drugi su
// suvišan (isto kao _POST, _GET)
// Uključite i varijable koje želite zanemariti iz sigurnosnih razloga - tj. PHPSESSID.
$ ignorelist = niz ("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 = date ("m / d / y h: m: s");
$ message = "Izveštaj o otklanjanju grešaka je kreiran $ timestamp \ n";

// Dobijte zadnju SQL grešku za dobru mjeru, gdje je $ link identifikator resursa
// za mysql_connect. Komentirajte ili izmijenite svoju bazu podataka ili postavku apstrakcije.
globalna $ veza;
$ sql_error = mysql_error ($ veza);
if ($ sql_error) (
$ message. = "\ nMysql poruke: \ n". mysql_error ($ veza);
}
// Završetak MySQL -a

// Ovdje bi se mogla 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 ($ podključ, $ ignorelist) &&! is_array ($ subval)) (
$ poruka. = $ potključ. "=". $ subval. "\ n";
}
elseif (! in_array ($ podključ, $ ignorelist) && is_array ($ subval)) (
foreach ($ subval kao $ subsubkey => $ subsubval) (
if (! in_array ($ subsubkey, $ ignorelist)) (
$ poruka. = $ podključ. "=". $ subsubval. "\ n" ;
}
}
}
}
}
elseif (!
is_array ($ val) &&! in_array ($ key, $ ignorelist) && $ val) (
$ message. = "\ nPromenljiva". $ key. "=". $ val "\ n";
}
}

Ako ($ method == "pretraživač") (
echo nl2br ($ poruka);
}
elseif ($ method == "email") (
if ($ email == "undefined") (
$ email = $ _SERVER ["SERVER_ADMIN"];
}

$ mresult = mail ($ email, "Debug Report for". $ _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 objekta get_defined_vars u XML.

funkcija obj2xml ($ v, $ indent = "") (
while (lista ($ key, $ val) = svaki ($ v)) (
if ($ key == "__attr") continue;
// Provjerite ima li __attr
if (is_object ($ val -> __attr)) (
while (lista ($ 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 = "John";
$ x -> ime -> last = "Smith";
$ x -> arr ["Voće"] = "Bannana";
$ x -> arr ["Veg"] = "Šargarepa";
$ y -> kupac = $ x;
$ y -> kupac -> __attr -> id = "176C4";

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


John
Smith


Bannana
Mrkva

Prije 11 godina

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

// definiramo varijablu
$ my_var = "foo";

// dobivamo našu listu definiranih varijabli
$ defined_vars = get_defined_vars ();

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

echo $ my_var, "\ n";

?>

će ispisati "foo" (izvorna vrijednost). Bilo bi lijepo da get_defined_vars () ima izborni argument da ih navede kao reference, 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 = ključevi polja (get_defined_vars ());

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

?>

Prije 1 godinu

Ovdje sam već pisao o tome da je "ovo" u get_defined_vars.

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

Php -r "
razredni test (
javna funkcija a () (var_dump (ključevi polja (get_defined_vars ())); $ a = 123;)
javna funkcija b () (var_dump (ključevi polja (get_defined_vars ())); $ this;)
}
$ t = novi Test ();
$ t-> a ();
$ t-> b ();
"

Polje ()
niz ("ovo")

To 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 i imena su "reference".

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

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

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

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

Učinio sam neke čudne stvari u svoje vrijeme da napravim izuzetno generički kod, ali nikada nisam morao učiniti ništa poput gore navedenog. Možda čak neće ni funkcionirati (ali trebao bi jer se ne razlikuje od $ a [$ key]).

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

Ako radite tako nešto, dajte mu dodatnu provjeru.