Přihlásit se

Joomla 5.1.0 a Joomla 4.4.4 (17 dub 2024)

Dnes byla uvolněna nová verze Joomla 5.1.0, společně s Joomla 4.4.4. Tato verze přináší spoustu nových funkcí, vylepšení v oblasti bezpečnosti a kódu a díky těmto vylepšením i vyšší rychlost.

Vyřešeno URL odkaz

16. zář 2015 20:40 #123435
Odpověď od Ernst
Joomla Expert
Tak to funguje bezvadně.
Použil jsem i následující funkci:
public function url_exists ($url) {
if ($h = @get_headers($url))
if (array_key_exists(0,$h) && preg_match('/200|301|302/',$h[0]))
return '1';
}
a dávám tam aktivní odkaz jen na existující stránky.

Taky už konečně chápu $this a pod.
Volat funkci mohu tridaa::url_exists ($url) nebo $this->url_exists ($url)
Pokud volám z jiné třídy (je tam require_once), Tak mohu volat z třídy b jen jako tridaa::url_exists ($url) nebo mohu odkázat i na to $this? Já si myslím, že to nejde, ale raději se ptám

16. zář 2015 21:24 - 16. zář 2015 21:25 #123437
Odpověď od Cony
Moderátor
To je rozdíl mezi třídou a objektem (instancí chcete-li). Třída je definice objektu, objekt musíte vytvořit. (v PHP pomocí klíčového slova new). Třídu máte jen jednu, objektů té třídy můžete mít kolik chcete. $this odkazuje objekt sám na sebe. Používáte-li volání $this-> voláte funkci objektu. Používáte-li :: voláte statickou funkci třídy. Když se v tom zamotáte skončíte fatální chybou, každé volání má úplně jiný význam a úplně jiný smysl.

16. zář 2015 22:28 - 16. zář 2015 22:28 #123439
Odpověď od Ernst
Joomla Expert
tohle vše chápu.
Ale jaký je rozdíl mezi volání funkce (metody) pomocí :: nebo $this v rámci té samé třídy. Já to chápu, tak že žádný.
Pokud volám z jiné třídy, musím volat staticky - ::
Hodnoty třídy se prvotně nastavují v konstruktoru, ale samozřejmě je mohu měnit a plnit kdekoliv v rámci třídy.

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.

Powered by Fórum