Autor | Zpráva | ||
---|---|---|---|
4ever Profil |
#1 · Zasláno: 23. 5. 2011, 14:41:53 · Upravil/a: 4ever
Dotaz na klíčové slovo static. V manuálu se píše:
Declaring class properties or methods as static makes them accessible without needing an instantiation of the class. Myslel jsem že se to slovo používá pouze na úrovni třídy. Ale viděl jsem funkci, která je přístupná z globálního scopu a obsahuje tuto deklaraci: function is_loaded($class = '') { static $_is_loaded = array(); if ($class != '') { $_is_loaded[strtolower($class)] = $class; } return $_is_loaded; } Co teda znamená static v této deklaraci. Znamená to, že ta proměnná $_is_loaded je přístupná zvnějšku normálně jako všechny proměnné v globalu? Tedy jaký je rozdíl mezi static a global? Dík za vysvětlení |
||
ShiraNai7 Profil |
#2 · Zasláno: 23. 5. 2011, 14:48:32
- Static značí proměnnou, která je zachována i po skončení volání funkce
- Global referencuje proměnnou z $GLOBALS mezi lokální proměnné |
||
TomášK Profil |
#3 · Zasláno: 23. 5. 2011, 14:51:18
Je potřeba rozlišovat:
* statickou funkci v rámci třídy (o tom mluví ta část manuálu, kterou si zkopíroval) * statickou proměnou třídy (o tom též mluví ta část manuálu, kterou si zkopíroval) * statickou proměnnou uvnitř funkce První dvě jsou podobné globálním proměnným/funkcím, jen jsou v namespacu třídy. Poslední (viz ShiraNai7) „značí proměnnou, která je zachována i po skončení volání funkce“ |
||
4ever Profil |
#4 · Zasláno: 23. 5. 2011, 16:28:02
ShiraNai7:
- Static značí proměnnou, která je zachována i po skončení volání funkce Wow. Tak to je teda užitečné. Zvláštní, že jsem o něčem takovém až doposud nevěděl... TomášK: Nebyl by odkaz na nějaké české stránky popisující tyhle tři případy, ale hodně srozumitleně a jednoduše a aby tam byly i příklady na vyzkoušení pro každou z nich? Díky |
||
4ever Profil |
#5 · Zasláno: 23. 5. 2011, 16:47:18 · Upravil/a: 4ever
Teda oni jsou sice příklady u toho manuálu, ale tam se zřejmě nerozlišuje mezi těmito třeba situacema. Dost se v tom ztrácím co k čemu slouží, těch odborných výrazů je až moc.
|
||
4ever Profil |
#6 · Zasláno: 23. 5. 2011, 17:13:28 · Upravil/a: 4ever
Na článku z interval.cz se píše
PHP nám dovoluje definovat metodu nebo vlastnost jako statickou.. Znamená to, že se váže na třídu a nikoli na danou instanci. Já sem nejdříve nechápal co to znamená, ale teď s tím příkladem co tam je, chápu to dobře, že to znamená, že v té třídě se zachovává ta proměnná? <?php class Trida{ public static $pocitadlo = 0; public $id; public $pocitadlo_nestaticke = 0; public $id_nestaticke; public function __construct(){ $this->id = self::$pocitadlo++; $this->id_nestaticke = $this->pocitadlo_nestaticke++; } } $instance = new Trida(); echo $instance->id; echo $instance->id_nestaticke; $instance = new Trida(); echo $instance->id; echo $instance->id_nestaticke; ?> V příklade $pocitadlo_nestaticke se vždy resetuje. Kdežto public static $pocitadlo se nastaví na nulu pouze při prvním načtení třídy, chápu to správně? Čili v tom příkladu se $pocitadlo zvýší o jedna příkazem $pocitadlo++ a je to uloženo ve třídě. |
||
ShiraNai7 Profil |
#7 · Zasláno: 23. 5. 2011, 17:35:27
Statické proměnné jsou vázány přímo na třídu (-> sdílí je všechny instance dané třídy).
O nějaké "zachovávání" jde spíš u statických proměnných uvnitř funkcí, které jsem popsal výše. |
||
4ever Profil |
#8 · Zasláno: 23. 5. 2011, 18:11:41
A co tedy dělají ty dvě? statická metoda a statická vlastnost?
|
||
Časová prodleva: 13 let
|
0