Globálne premenné v PHP

22. 8. 2019

Globálne premenné sú k dispozícii kedykoľvek v ktorejkoľvek časti aplikácie a nie je potrebné ich odovzdávať.

Upozornenie: Dobre navrhnutá aplikácia by nemala používať globálne premenné, pretože porušujú princíp zapuzdrenia a pri neopatrnej manipulácii môžu spôsobiť ťažko odhaliteľné chyby.

Príklad použitia:

php
$a = 1;
$b = 2;
function suma(): void
{
global $a, $b;
$b = $a + $b;
}
suma();
echo $b; // vypíše číslo 3, pretože premenná $b je globálna

Všimnite si, že premenné $a a $b sme získali mimo ich prirodzeného kontextu. Toto správanie sa označuje ako "magic", pretože ak iná funkcia prepíše aktuálne používané premenné, v aplikácii nastane neočakávaný stav.

Správne by mala aplikácia zapúzdriť a zakaždým odovzdať premenné:

php
$a = 1;
$b = 2;
function suma(int $a, int $b): int
{
return $a + $b;
}
echo suma($a, $b); // vytlačí 3

Vďaka tomu môžeme funkciu volať dynamicky s rôznymi vstupnými parametrami a jej výstup bude závisieť len od vstupov, nie od prostredia.

Získavanie vstupných parametrov z adresy URL

Jediné rozumné použitie globálnych premenných je snáď len pri analyzovaní používateľských vstupov, v takom prípade hovoríme o superglobálnych premenných.

V tomto prípade ide o čistý návrh, pretože premenná by mala byť len na čítanie, nie na zápis, a navyše je rovnaká v celej aplikácii:

php
function getNameFromUrl(): string
{
return isset($_GET['name'])
? htmlspecialchars($_GET['name'])
: '';
}
echo getNameFromUrl();
Jan Barášek
Jan BarášekVíce o autorovi

Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.

Rád vám pomůžu:

Newsletter

Nejlepsi tipy a triky o PHP do Vaseho e-mailu. Clanky a novinky nejen ze sveta PHP a programovani.