Autor Zpráva
4ever
Profil
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
- 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
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
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
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
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
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
A co tedy dělají ty dvě? statická metoda a statická vlastnost?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0