Výstup všech proměnných v php. PHP variabilní rozsah. Vše, co jste chtěli vědět, ale báli jste se zeptat. Statické proměnné: jsou někde poblíž
PHP proměnné je druh informačního kontejneru, který může obsahovat Různé typy data (text, čísla, pole atd.). Proměnné obecně umožňují vytvářet, ukládat, upravovat a v budoucnu rychle přistupovat k informacím v nich specifikovaným.
Jak vytvořit proměnnou v PHP
Zpočátku proměnné obsahují znaménko $ (dolar) - označení použití proměnné, dále písmena latinka(od a do z a malé a velké), na konci může obsahovat čísla... V názvu je také povoleno používat podtržítko (nikoli na konci).Jak lze proměnné pojmenovat:
$ var
$ proměnná
$ rok 1945
$ _variable
Jak nelze volat proměnné:
$ 1 – skládá se pouze z číslice
$ 1var – název proměnné nemůžete začínat číslicí
$ / var – u dalších znaků jsou povolena pouze podtržítka _
$ variable - azbuka povolena dokumentací php, ale nedoporučuje se
$ proměnná - mezery nelze použít
Každé proměnné je přiřazena hodnota. Chcete-li přiřadit hodnotu, použijte znaménko =
(rovná se). Během zpracování skriptu se hodnota proměnné může opakovaně měnit v závislosti na různých podmínkách.
$ město = "Moskva"; // proměnné $ město byla přiřazena řetězcová (v uvozovkách) hodnota Moskva
$ rok = 1147; // a proměnné $ year byla přiřazena číselná hodnota 1147
?>
$ jméno = "Alexander";
$ Jméno = "Alexe";
echo "$ jméno, $ Jméno"; // zobrazí "Alexander, Alexey"
?>
PHP variabilní výstup
Samostatně byste měli zvážit, jak zobrazit proměnné pomocí výstupní operátory, jehož práci jsme zkoumali v minulé lekci, Vytvoření stránky PHP. Operátoři výstupu. ... Níže uvedu řadu názorných příkladů s komentáři.// Takto přiřazujeme hodnoty proměnným
$ name1 = "Alexey";
$ name2 = "Alexander";
// Zobrazení proměnných
echo $ jméno2; // Výstup: Alexander
echo "jméno1 je $ jméno1"; // jméno1 je Alexey
// Při použití jednoduchých uvozovek je výstupem
// název proměnné, nikoli hodnota
echo "jméno1 je $ jméno1"; // vytiskne: jmeno1 je $ jmeno1
// můžete jednoduše zobrazit hodnoty proměnných
echo $ jméno1; // Alexey
echo $ jméno1, $ jméno2; // Alexey Alexander
echo $ jmeno1. "". $ jmeno2; // Alexey Alexander
echo "$ jméno1, $ jméno2"; // Alexey, Alexander
Echo<<
více řádků s proměnnou substitucí $.
KONEC;
Operace proměnných PHP
Aritmetické operace v PHPV případě číselných hodnot můžete provádět aritmetické operace: sčítání, odčítání, násobení atd.
- $ a(negace) Změňte znaménko $ a.
$ a + $ b(dodatek) Součet $ a a $ b.
$ a - $ b(odčítání) Rozdíl mezi $ a a $ b.
$ a * $ b(násobení) Součin $ a a $ b.
$ a / $ b(dělení) Podíl $ a děleno $ b.
$ a% $ b(modulo dělení) Celý zbytek $ a děleno $ b.
Podívejme se na příklady
$ a = 2; // poznámka, v případě čísel se uvozovky nepoužívají
$ b = 3; // poznámka, v případě čísel se uvozovky nepoužívají
$ vysledek = $ a + $ b; // přidání proměnných
echo $ výsledek; // vytiskne 5
$ výsledek = $ b - $ a; // přidání proměnných
echo $ výsledek; // vypíše 1
Operace inkrementace a dekrementace v PHP
Tyto operace se budou hodit hlavně při konstrukci smyček, o kterých si povíme trochu později.
Předpona- operátory zapsané PŘED proměnnou ( - $ a; ++ $ a). Vrátí hodnotu proměnné před změnou.
Postfix- operátory zapsané za proměnnou ( $ a--; $ a--). Vrátí upravenou hodnotu proměnné.
Přírůstek- zvýšení hodnoty.
Dekrementovat- snížení hodnoty.
++ $ a Přírůstek předpony. Zvýší $ a o jednu a vrátí hodnotu $ a.
$ a ++ Přírůstek Postfixu. Vrátí hodnotu $ a a poté zvýší $ a o jednu.
- $ a Snižování předpony. Sníží $ a o jednu a vrátí hodnotu $ a.
$ a-- Postfixový dekrement. Vrátí hodnotu $ a a poté sníží $ a o jednu.
echo"
Přírůstek Postfixu
";$ a = 5;
echo "Mělo by být 5:". $ a ++. "\ n";
echo"
Přírůstek předpony
";$ a = 5;
echo "Mělo by být 6:". ++ $ a. "\ n";
echo "Mělo by být 6:". $ a. "\ n";
echo"
Postfixový dekrement
";$ a = 5;
echo "Mělo by být 5:". $ a--. "\ n";
echo"
Snižování předpony
";$ a = 5;
echo "Mělo by to být 4:". - $ a. "\ n";
echo "Mělo by to být 4:". $ a. "\ n";
?>
Operace přiřazení PHP
Základní operátor vypadá jako =
... Na první pohled se může zdát, že tento operátor je rovnocenný. Ve skutečnosti tomu tak není. Operátor přiřazení ve skutečnosti znamená, že levý operand je nastaven na hodnotu pravého výrazu (to znamená, že je nastaven na výslednou hodnotu). Kombinované operátory- jedná se o operátory, které umožňují použít předchozí hodnoty proměnných pro následné operace (přidat k řetězcové proměnné (s textem) nebo přidat číselné hodnoty).
$ a = ($ b = 2) + 4; // výsledek: $ a je nastaveno na 6, $ b je nastaveno na 2.
$ a = 2;
$ a + = 3; // nastaví $ a na 5, podobně jako při psaní: $ a = $ a + 3;
$ b = "Dobrý den";
$ b. = "Mír!"; // nastaví $ b na „Hello World!“ stejně jako $ b = $ b. "Tam!";
Jsou tu také srovnávací operace a hlavolam, ale o nich si povíme až v dalších lekcích. Pokusím se vás hned nevyděsit velkým množstvím informací!)
Pokračování dříve položené otázky s novými detaily.Takže: Stránky v cloudu, téma - Výchozí 3.0, can_use_smarty = true Na produktových podstránkách docela dobře funguje Smarty kód, je možné přistupovat a zobrazovat potřebné proměnné V produktu popis...
Ahoj. V souboru checkout.html je proměnná $ cart_total = $ wa-> shop-> cart-> total () ukládá konečnou cenu. A jak tyto náklady rozdělit na náklady na doručení a náklady na objednávku a přinést to vše na místo?
Existuje řešení
Dobré odpoledne, řekni mi to, pliz. Mám několik ID produktů. Například 1, 3, 5. Chci o nich získat data z $ wa-> shop-> product (). Potřebuji přiřadit proměnnou k produktovým datům pro tato 3 ID. Jak na to? Není silný při...
Něco takového (píšu z paměti, potřebuji zkontrolovat) ($ all_my_products = $ wa-> shop-> products ()) (foreach $ all_my_products as $ ab)
($ ab | var_dump)(/ pro každého)
Chci zobrazit 3 ceny za výlohu současně Existuje řešení
Ahoj! V IM jsou 3 standardní ceny: Nákup, Přeškrtnutí a Maloobchod. Také jsem pomocí pluginu Multi-price vytvořil 2 další doplňkové ceny Velkoobchod, Prodejce. Je nutné, aby se všechny 3 ceny promítly pro všechny kupující, ale když klient ...
Otázka je uzavřena – chlapi už to dělají.
Jaký dotaz můžete zobrazit seznam dostupných proměnných Existuje řešení
Řekněte mi, co můžete ve vývoji použít kromě (debug) a (wa_dumpc ($ order)) k zobrazení dostupných proměnných na stránce a tak dále... Jaké konstrukty a dotazy můžete při vývoji použít?
(wa_tpl_vars) - Pomocník, který vám umožní zobrazit všechny proměnné předané aktuální šabloně .... tato otázka již byla diskutována.
Existuje řešení
Ahoj, nerozumím ničemu v php, je tam jen obecný koncept, o smyčkách, polích atd. Používám css, html, bootstap, uikit, protože nerozumím frameworku, neumím ho používat naplno, nechápu, jak akce fungují a kde je získat (jako ...
Podívejte se na popis Smarty šablonového enginu. Šabloně jsou předány proměnné, které jsou vygenerovány a předány uživateli. Chcete-li zjistit, co je v proměnné obsaženo, můžete ji vypsat samostatně ($ post | wa_print_r) (foreach $ post.plugins.before jako $ plugin => $ output) ($ output) (/ foreach) Pomocí tohoto kódu získejte pole z proměnné $ post.plugins.before, která obsahuje klíč ($ plugin) a hodnotu ($ výstup. Vypíše všechny hodnoty (výstup $) na stránku.
+1 Nepřijato
Proměnné z Cheat Sheetu nefungují, když jsou vloženy do Oznámení o objednávce, stejně jako do vašeho tisknutelného objednávkového formuláře...
Upřesnění výchozího motivu 2.0
Je potřeba provést nějaká vylepšení designu Default 2.0 1. Zarovnat výšku obrázků produktů v kategoriích https: //yadi.sk/i/JazqloIg3ZQU ... 2. Změnit výstup stručný popis, zobrazit další pole s ikonami ...
Dobrý den, prosím o sdělení, jak zobrazit vlastnosti zboží v košíku a v katalogu (seznamu zboží), které se vybírá ručně, např. velikost?1) V košíku je již vybraná hodnota. Standardní soubor šablony (product.cart.html) .2) V seznamu produktů ...
Prosím, pomozte mi na to přijít. Kde najít úplnější dokumentaci k motoru. Totiž mě zajímají všechny chytré proměnné, jak uhodnu, s jakým kódem mám zobrazit produktový katalog, košík, obrázek produktu, vlastnosti atd. a...
Existuje řešení
Dobré odpoledne. Bylo potřeba vytvořit několik roletových nabídek Design theme Design with taste PRO Vylezl jsem na postranní panel / nav.html, duplikací kódu jsem byl schopen získat druhou nabídku, ale protože je identická, přirozeně jí začala vládnout. Jakmile jsem...
Můžete vytvořit jednoduchou rozbalovací nabídku, aniž byste museli kopírovat části kódu spojené se skripty motivu návrhu, ale vytvořte si vlastní nabídku. Zde je skript (vložte jej do šablony motivu) 350 ms je doba zobrazení, a pokud chcete, můžete přidat další různé efekty. Poté vytvoříte dva objekty tříd open a menu
Pole adresy je složené (skládá se z podpolí), takže pokud chcete zobrazit konkrétní dílčí prvek, musíte určit který. Například takto ($ addr = $ wa-> uživatel ("adresa")) Město: ($ addr.data.city) ukazuje na první adresu v poli kontaktních adres (může být několik adres: dodací adresa , adresa plátce, pracovní, osobní atd.) Dokumentace: http://www.webasyst.ru/developers/docs/features/contacts-app-integration/
+9
Soudruzi! Nedávno se potýkal s problémem centralizované práce pluginů se šablonami v designových tématech. Tito. chyběl, existují nějaké pluginy, ve kterých je napsáno: vytvořte šablonu v motivu designu, pak se použije a tak dále ... Ukazuje se ...
Existuje řešení
Všiml jsem si, že na webu (webu aplikace), nezaměňovat s obchodem, se na stránkách nezobrazuje označení. Šel jsem na web webasyst, všechny jsou v pořádku, jak to implementovat, kam vložit jaký kód? A proč to není výchozí?
Web - Stránky - Vyberte stránku a v horní části Nastavení stránky - sekce Sociální sítě. Výstup kódu php Jsou zde 3 hlavní soubory (index.php), soubor s javascriptem a soubor php. Soubor php je tímto způsobem spojen se souborem javascript var JSONReviewsGeneratorReference = "cesta k souboru php"; Ale ukázalo se, že php kód v shopscriptu nelze použít (na ... Prosím, řekněte mi, kdo ví. Mám téma Design s chutí 2. V katalogu zboží, kde je zobrazeno veškeré zboží s názvem a cenou, je nutné zobrazit ceny výše a článek daného produktu. Kontaktoval jsem vývojáře motivu, říká, že neznám proměnnou. Jak... před 12 lety Trošku si dát pozor: Pokud vypnete RegisterGlobals a související, pak použijete get_defined_vars (), můžete vidět něco jako následující: Pole [_POST] => Pole () ) tisk "
[GLOBÁLNÍ] => Pole
[GLOBÁLNÍ] => Pole
* REKURZE *
[_POST] => Pole ()
[_GET] => Pole ()
[_COOKIE] => Pole ()
[_FILES] => Pole ()
)
[_GET] => Pole ()
[_COOKIE] => Pole ()
[_FILES] => Pole ()
?>
Všimněte si, že $ _SERVER tam není. Zdá se, že php načte superglobální $ _SERVER pouze v případě, že je někde použit. Můžete to udělat takto:". htmlspecialchars (print_r (get_defined_vars (), true))."
"
;
tisk " ". htmlspecialchars (print_r ($ _SERVER, true))."
"
;
?>
A poté se v obou seznamech objeví $ _SERVER. Myslím, že to "není opravdu blbost, protože v obou případech se nic špatného nestane, ale je to" zajímavá kuriozita.
před 6 lety
Protože get_defined_vars () získává proměnné pouze v okamžiku, kdy funkci voláte, existuje jednoduchý způsob, jak získat proměnné definované v aktuálním rozsahu.
// Vrchol vašeho php skriptu
$ vars = get_defined_vars ();
// Nyní udělejte své věci
$ foo = "foo";
$ bar = "bar";
// Získá všechny proměnné definované v aktuálním rozsahu
$ vars = array_diff (get_defined_vars (), $ vars);
echo"
" ;" ;
print_r ($ vars);
echo"
?>
před 15 lety
Zde je funkce, která generuje zprávu o ladění pro zobrazení nebo e-mail
pomocí get_defined_vars. Skvělé pro získání detailního snímku bez
spoléhat se na vstup uživatele.
function generationDebugReport (metoda $, $ define_vars, $ email = "undefined") (
// Funkce pro vytvoření zprávy o ladění, která se zobrazí nebo odešle.
// Použití: createDebugReport (method, get_defined_vars (), email);
// Kde metoda je "prohlížeč" nebo "e-mail".
// Vytvoří seznam ignorovaných klíčů vrácených "get_defined_vars".
// Například HTTP_POST_VARS, HTTP_GET_VARS a další jsou
// redundantní (stejné jako _POST, _GET)
// Zahrňte také proměnné, které chcete z bezpečnostních důvodů ignorovat – tj. PHPSESSID.
$ ignorelist = pole ("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");
$ časové razítko = datum ("m / d / y h: m: s");
$ message = "Vytvořena zpráva o ladění $ časové razítko \ n";
// Získejte poslední chybu SQL pro dobrou míru, kde $ link je identifikátor zdroje
// pro mysql_connect. Zakomentujte nebo upravte nastavení databáze nebo abstrakce.
globální odkaz $;
$ sql_error = mysql_error (odkaz $);
if ($ sql_error) (
$ message. = "\ nZprávy Mysql: \ n". mysql_error (odkaz $);
}
// Ukončení MySQL
// Zde lze použít rekurzivní funkci. Máš nápad ;-)
foreach ($ define_vars jako $ klíč => $ val) (
if (is_array ($ val) &&! in_array ($ klíč, $ ignorelist) && count ($ val)> 0) (
$ zpráva. = "\ n $ pole klíčů (klíč = hodnota): \ n";
foreach ($ val jako $ podklíč => $ subval) (
if (! in_array ($ podklíč, $ ignorelist) &&! is_array ($ subval)) (
$ zpráva. = $ podklíč. "="." $ subval. "\ n";
}
elseif (! in_array ($ podklíč, $ ignorelist) && is_array ($ subval)) (
foreach ($ subval jako $ subsubkey => $ subsubval) (
if (! in_array ($ podklíč, $ ignorelist)) (
$ zpráva. = $ podklíč. "="." $ subsubval. "\ n" ;
}
}
}
}
}
jinak (! is_array ($ val) &&! in_array (klíč $, $ ignorelist) && $ val) (
$ message. = "\ nProměnná". $ klíč. "="." $ val. "\ n";
}
}
If (metoda $ == "prohlížeč") (
echo nl2br ($ zpráva);
}
elseif (metoda $ == "e-mail") (
if ($ email == "undefined") (
$ email = $ _SERVER ["SERVER_ADMIN"];
}
$ mresult = mail ($ email, "Debug Report for". $ _ENV ["HOSTNAME"]. "", $ message);
if ($ mresult == 1) (
echo "Hlášení o ladění bylo úspěšně odesláno. \ N";
}
jinak (
echo "Nepodařilo se odeslat zprávu o ladění. \ N";
}
}
}
?>
před 17 lety
Jednoduchá rutina pro převod objektu get_defined_vars na XML.
funkce obj2xml ($ v, $ indent = "") (
while (seznam (klíč $, $ val) = každý ($ v)) (
if (klíč $ == "__attr") pokračovat;
// Zkontrolujte __attr
if (is_object ($ val -> __attr)) (
while (seznam ($ key2, $ val2) = každý ($ val -> __attr)) (
$ attr. = "$ klíč2 = \" $ hodnota2 \ "";
}
}
else $ attr = "";
if (is_array ($ val) || is_object ($ val)) (
tisknout („$ odsazení<
$key$attr
>\ n ");
obj2xml ($ val, $ odsazení. "");
tisknout („$ odsazení
$key
>\ n ");
}
jinak tisk („$ odsazení<
$key$attr
>$ val
$key
>\ n ");
}
}
// Příklad objektu
$ x -> jméno -> první = "Jan";
$ x -> jméno -> poslední = "Smith";
$ x -> arr ["Ovoce"] = "Banán";
$ x -> arr ["Veg"] = "Mrkev";
$ y -> zákazník = $ x;
$ y -> zákazník -> __attr -> id = "176C4";
$ z = get_defined_vars ();
obj2xml ($ z ["y"]);
?>
vypíše:
před 10ti lety
Poznámka: get_defined_vars () nevrací sadu odkazů na proměnné (jak jsem doufal). Například:
// definovat proměnnou
$ my_var = "foo";
// získat náš seznam definovaných proměnných
$ define_vars = get_defined_vars ();
// nyní zkuste změnit hodnotu prostřednictvím vráceného pole
$ define_vars ["my_var"] = "bar";
echo $ my_var, "\ n";
?>
vypíše "foo" (původní hodnota). Bylo by hezké, kdyby get_defined_vars () měl volitelný argument, aby z nich byly odkazy, ale představuji si, že je to spíše specializovaný požadavek. Můžete to udělat sami (méně pohodlně) pomocí něčeho jako:
$ definované_vars = pole ();
$ var_names = array_keys (get_defined_vars ());
foreach ($ var_names jako $ var_name)
{
$ define_vars [$ var_name] = & $ $ var_name;
}
?>
před 1 rokem
Již dříve jsem zde psal o tom, že „toto“ je v get_defined_vars.
Ukazuje se, že „ne vždy existuje, ale v určitých případech se to nevysvětlitelně objeví.
php -r"
třídní test (
public function a () (var_dump (array_keys (get_defined_vars ())); $ a = 123;)
public function b () (var_dump (array_keys (get_defined_vars ())); $ this;)
}
$ t = nový test ();
$ t-> a ();
$ t-> b ();
"
Pole ()
pole ("toto")
To se nestane v PHP 7.2, ale stane se to v PHP 5.6.
před 1 rokem
Některé komentáře zde poukazují na to, že tato funkce nevrátí odkazy. Vrací však jména a názvy jsou "odkazy".
Nedoporučoval bych zde návrhy, které to převádějí na reference.
Veřejná funkce x ($ a, $ b, $ c) (
foreach (array_keys (get_defined_vars ()) jako $ klíč)
if (klíč $! == "toto")
$ this-> y ($ (klíč $));
}
Veřejná funkce y (& vstup $) (
$ vstup ++;
}
Místo $ () můžete také použít $$.
Ve své době jsem udělal nějaké šílené věci, abych vytvořil extrémně obecný kód, ale "nikdy jsem nemusel dělat nic podobného výše. Možná to ani nebude fungovat (ale mělo by to, protože se to neliší od $ a [$ klíč]).
Dalo by se také použít $$ key ++, ale „nikdy jsem neviděl kód, který by byl“ strašně špatný (používání dynamického, kde dynamika „není prospěšná).
Pokud něco takového děláte, věnujte tomu další kontrolu.
Proměnné prostředí (prostředí) ve Windows obsahují různé informace o nastavení systému a prostředí uživatele. Rozlišujte uživatelské, systémové a procesní proměnné prostředí.
Nejjednodušší způsob, jak zobrazit obsah proměnných prostředí ve Windows, je otevřít vlastnosti systému ( sysdm.cpl) -> Pokročilé -> Proměnné prostředí. Jak vidíte, v otevřené sekci jsou dvě sekce: horní obsahuje uživatelské proměnné prostředí, spodní obsahuje systémové.
Proměnné prostředí jsou navíc uloženy v systémovém registru. Vlastní proměnné jsou uloženy v sekci. Systémové - in HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment.
Hodnoty všech proměnných prostředí můžete zobrazit v příkazovém řádku Windows. Příkaz je jednoduchý:
Příkaz zobrazí seznam proměnných prostředí a jejich hodnot.
V PowerShellu můžete pomocí příkazu zobrazit všechny proměnné prostředí:
Pokud chcete vytisknout hodnotu pouze jedné proměnné, musíte použít příkaz echo a název proměnné musí být uzavřen v procentech. Například,
Echo% kořenový adresář systému%
set> c: \ tmp \ env_var.txt
Procesně specifické proměnné prostředí lze získat pomocí free Nástroje Process Explorer(od Sysinternals). Stačí otevřít vlastnosti procesu a přejít na kartu životní prostředí.
Tato lekce se zabývá rozsahem proměnných PHP. Vysvětluje rozdíl mezi lokálními a globálními rozsahy, ukazuje, jak přistupovat ke globálním proměnným v rámci funkce, jak pracovat se superglobály a jak vytvářet statické proměnné.
Když se začnete učit PHP a začnete pracovat s funkcemi a objekty, rozsah proměnných je trochu matoucí. Naštěstí jsou pravidla PHP v tomto ohledu velmi snadno pochopitelná (ve srovnání s jinými programovacími jazyky).
co je rozsah?
Rozsah proměnné je kontext, ve kterém byla proměnná definována a kde k ní lze přistupovat. PHP má dva variabilní rozsahy:
- Globální- Proměnné jsou přístupné kdekoli ve skriptu
- Místní- proměnné jsou přístupné pouze uvnitř funkce, ve které byly definovány
Variabilní rozsah a zejména místní rozsah výrazně usnadňuje správu kódu. Pokud by byly všechny proměnné globální, mohly by být změněny kdekoli ve skriptu. To by vedlo k chaosu a velkým skriptům, protože různé části skriptu velmi často používají proměnné se stejným názvem. Rozsahem místního kontextu definujete hranice kódu, který může přistupovat k proměnné, díky čemuž je kód robustnější, modulárnější a snáze se ladí.
Proměnné s globálním rozsahem se nazývají globální a proměnné s místním rozsahem se nazývají lokální.
Zde je příklad toho, jak fungují globální a místní proměnné.
";) sayHello (); echo" Hodnota \ $ globalName: "$ globalName"
"; echo" Hodnota \ $ localName: "$ localName"
";
?>
Ahoj Harry! $ GlobalName value: "Zoe" $ localName value: ""
V tomto skriptu jsme vytvořili dvě proměnné:
- $ globalName- tohle je globální variabilní
- $ localName- tohle je místní proměnná, která je vytvořena uvnitř funkce sayHello ().
Po vytvoření proměnné a funkce skript zavolá sayHello (), jehož výstupem je "Ahoj Harry!" ... Skript se poté pokusí zopakovat hodnoty dvou proměnných. Tady je to, co se děje:
- Protože $ globalName byl vytvořen mimo funkci, je k dispozici kdekoli ve skriptu, takže se zobrazí "Zoya".
- $ localName bude k dispozici pouze ve funkci sayHello (). Protože výraz echo je mimo funkci, PHP neumožňuje přístup k místní proměnné. Místo toho PHP předpokládá, že kód vytvoří novou proměnnou s názvem $ localName, která obdrží výchozí hodnotu prázdného řetězce. to je důvod, proč druhé volání echo vypíše hodnotu "" pro proměnnou $ localName.
Přístup ke globálním proměnným uvnitř funkce
Pro přístup ke globální proměnné mimo funkci stačí napsat její jméno. Ale pro přístup ke globální proměnné vnitřní funkce, musíte proměnnou nejprve deklarovat jako globální ve funkci pomocí klíčového slova global:
Funkce myFunction () (global $ globalVariable; // Přístup ke globální proměnné $ globalVariable)
Pokud tak neučiníte, PHP předpokládá, že vytváříte nebo používáte lokální proměnnou.
Zde je příklad skriptu, který používá globální proměnnou uvnitř funkce:
"; global $ globalName; echo" Dobrý den, $ globalName!
";) řekni Ahoj ();?>
Po spuštění skript vypíše:
Ahoj Harry! Ahoj Zoya!
Funkce sayHello () používá klíčové slovo global k deklaraci proměnné $ globalName jako globální. Poté může přistupovat k proměnné a zobrazit její hodnotu ("Zoya").
Co jsou superglobálové?
PHP má speciální sadu předdefinovaných globálních polí, která obsahují různé informace. Taková pole se nazývají superglobálové, protože jsou přístupné odkudkoli ve skriptu, včetně vnitřního prostoru funkcí, a není třeba je definovat pomocí klíčového slova global.
Zde je seznam superglobálů dostupných v PHP 5.3:
- $ GLOBALS - seznam všech globálních proměnných ve skriptu (kromě superglobálů)
- $ _GET – obsahuje seznam všech polí formuláře odeslaných prohlížečem pomocí požadavku GET
- $ _POST - obsahuje seznam všech polí formuláře odeslaných prohlížečem pomocí požadavku POST
- $ _COOKIE - obsahuje seznam všech cookies odeslaných prohlížečem
- $ _REQUEST – obsahuje všechny kombinace klíč / hodnota, které jsou obsaženy v polích $ _GET, $ _POST, $ _COOKIE
- $ _FILES - obsahuje seznam všech souborů načtených prohlížečem
- $ _SESSION - umožňuje ukládat a používat proměnné relace pro aktuální prohlížeč
- $ _SERVER - obsahuje informace o serveru, jako je název souboru spouštěného skriptu a IP adresa prohlížeče.
- $ _ENV - Obsahuje seznam proměnných prostředí předávaných do PHP, například proměnné CGI.
Pokud výše uvedený skript spustíte s řetězcem URL http://www.example.com/script.php?vašeJméno=Fred, vypíše:
Ahoj Frede!
Varování! Ve skutečném skriptu byste nikdy neměli používat takový přenos dat kvůli slabému zabezpečení. Svá data byste měli vždy zkontrolovat nebo filtrovat.
Superglobal $ GLOBALS se velmi pohodlně používá, protože umožňuje organizovat přístup ke globálním proměnným ve funkci bez nutnosti použití klíčového slova global. Například:
";) sayHello (); // Tiskne" Ahoj, Zoe! "?>
Statické proměnné: jsou někde poblíž
Když vytvoříte lokální proměnnou uvnitř funkce, existuje pouze tehdy, když je funkce spuštěna. Když funkce skončí, lokální proměnná zmizí. Při opětovném volání funkce se vytvoří nová lokální proměnná.
Ve většině případů to funguje skvěle. Tímto způsobem jsou funkce samostatné a při každém volání fungují vždy stejně.
Existují však situace, kdy by bylo vhodné vytvořit lokální proměnnou, která si mezi voláními funkcí „pamatuje“ svou hodnotu. Taková proměnná se nazývá statická.
Chcete-li vytvořit statickou proměnnou ve funkci, musíte před názvem proměnné použít klíčové slovo static a dát mu počáteční hodnotu. Například:
Funkce myFunction () (statický $ myVariable = 0;)
Uvažujme situaci, kdy je vhodné použít statickou proměnnou. Řekněme, že vytvoříte funkci, která po zavolání vytvoří widget a zobrazí počet již vytvořených widgetů. Můžete zkusit napsat kód takto pomocí lokální proměnné:
"; echo createWidget ()." jsme již vytvořili.
"; echo createWidget ()." jsme již vytvořili.>
";
?>
Ale protože proměnná $ numWidgets je vytvořena pokaždé, když je funkce volána, dostaneme následující výsledek:
Vytváříme nějaké widgety ... 1 jsme již vytvořili. 1 jsme již vytvořili. 1 jsme již vytvořili.
Ale pomocí statické proměnné můžeme uložit hodnotu z jednoho volání funkce do dalšího:
"; echo createWidget ()." jsme již vytvořili.
"; echo createWidget ()." jsme již vytvořili.
"; echo createWidget ()."> jsme již vytvořili.
";
?>
Skript nyní vytvoří očekávaný výstup:
Vytváříme nějaké widgety ... 1 jsme již vytvořili. 2 jsme již vytvořili. 3 jsme již vytvořili.
Přestože si statická proměnná uchovává svou hodnotu mezi voláními funkcí, je platná pouze v době, kdy je skript spuštěn. Jakmile skript dokončí své provádění, všechny statické proměnné jsou zničeny, stejně jako lokální a globální proměnné.
To je vše! Často kontrolujte dokumentaci PHP.