Přihlásit se

Vyřešeno URL odkaz

17. zář 2015 00:17 #123444
Odpověď od Cony
Moderátor
Tak znovu
:: - volání statické metody třídy
-> volání metody objektu

Z jiné třídy nemusíte volat staticky to je nesmysl. Staticky musíte volat statické metody. Máte-li objekt, voláte je pomocí ->

V joomla např:
Code:
// statické volání metody getApplication třídy JFactory $app = JFactory::getApplication(); // získání property input objektu $app který je instancí třídy JApplication $input = $app->input;

Hodnoty třídy se v konstruktoru neplní, konstruktor se volá při vytváření objektu. Pročtěte si třeba toto nebo lépe nějaké základy obecného OOP

17. zář 2015 16:10 #123450
Odpověď od Ernst
Joomla Expert
To jsem vše již četl a mnoho dalšího, konstruktor je mi jasný, jen jsem se blbě vyjádřil.
Musím si vše osahat a zažít, to se za necelé dva měsíce asi nedá.
Ale stále nevím zda je ve výsledku to samé
trida::funkce() a this->funkce() voláno v té samé třídě.
vím, že nelze volat jen funkce(), to nejde
mně se to chová identicky

17. zář 2015 16:26 #123451
Odpověď od Cony
Moderátor
trida::funkce() - voláte staticky metodu funkce třídy trida (kromě toho jeste muzete volat self::funkce() nebo static::funkce(), každé volání má svůj význam).

$this->funkce() - voláte metodu objektu $this (tedy sama sebe).

I když v určitých případech PHP povoluje oba způsoby (ale pokud se nepletu generuje Notice nebo Warning), rozdíly tu jsou.

Pokud pomocí :: zavoláte metodu, která není deklarovaná jako static, dostanete tuším PHP Notice nebo Warning, funkce se ale zavolá (očekával bych ale že do budoucna bude PHP v tomto přésnější a nedovolí Vám to). Pokud ale ve funkci je použito $this, skončíte na Fatal Error.

Dědičnost zřejmě neřešíte, ale spíš by jste měl asi místo trida::funkce volat self::funkce.

17. zář 2015 18:00 #123452
Odpověď od Ernst
Joomla Expert
díky za vysvětlení. V tomto případě dědičnost neřeším, ale snad ji chápu.
v tomto případě je funkce definována jako static (public static function), právě proto že ji volám i z jiné třídy.
Ostatní funkce nechávám public a volám je jako $this->

17. zář 2015 18:12 #123453
Odpověď od Ernst
Joomla Expert
díky za vysvětlení. V tomto případě dědičnost neřeším, ale snad ji chápu.
v tomto případě je funkce definována jako static (public static function), právě proto že ji volám i z jiné třídy.
Ostatní funkce nechávám public a volám je jako $this->

A co je vlastně (logičtější) použít?
Při volání z různých tříd staticky a při volání jen z té samé třídy jako metodu objektu $this?

17. zář 2015 21:17 #123454
Odpověď od Cony
Moderátor
Ve statické metodě nemůžete používat vlastnosti objektu. Statické metody jsou spíše jen takové "povýšení" obyčejných funkcí, aby jste je měl pod "jednou střechou". Ve starších verzích PHP (5.3) bylo volání statických metod náročnější na prostředky, než volání běžných funkcí, PHP 5.4 by to již mělo mít opravené.

Powered by Fórum