Autor Zpráva
RiZe
Profil
Můžete mi někdo objasnit, jaký je rozdíl mezi voláním metod stylem $trida->metoda() a Trida::Metoda(), krom toho, že první příklad potřebuje mít inicializovanou instanci dané třídy? Co je lepší používat?
koudi
Profil
A to je přesně ten rozdíl. V prvním způsobu musíš mít vytvořenou instanci dané třídy, to druhé je statické volání, kde to nepotřebuješ.

Co je lepší používat?
Já bych to viděl asi takhle (ale netrvdim, že to je správně). Použivat první způsob (instance třídy) se vyplatí, když to použiješ vícekrát v tom skriptu a některý opreace budou záviset na aktuálních hodnotách proměnných té třídy. Zato statické volání se imho hodí, když daná třída funguje asi jako knihovna nějakých funkcí (třeba v javě Math. apod).
Ale možná je to celé blbost... do OOP teprve pronikám.
RiZe
Profil
I o to mi šlo. Jak je to s proměnnými třídy, ale vzhledem k tomu, že se (asi) nezavolá konstruktor (a neinicializují se proměnné), tak to nevidím na použití k DB layeru, kam si ukládám počet SQL dotazů, předchozí dotaz atp. Napište, jestli o tom někdo něco víte.
koudi
Profil
DB layeru, kam si ukládám počet SQL dotazů, předchozí dotaz atp
Tak na to se statické volání určitě nehodí...(řekl bych)
sicario
Profil
Pokud nechces zakladat instanci dane tridy, ale presto v ni uchovavat data, pouzij staticke promene...
class Trida {
private static $vlastnost;
function prirad($v){
Trida::$vlastnost = $v;
}
function vypis(){
echo Trida::$vlastnost;
}
}

// a pouziti

Trida::prirad('ahoj');
Trida::vypis();

//////////////////
Docela by me ale zajimalo, jestli je rychlejsi / mene narocne na pamet atd... pouzivani tohoto "statickeho" pristupu, nebo pouziti instanci.
ronnie
Profil
Rozdíl mezi statickými a klasickými metodami je v tom, že statické metody se vztahují k samotné třídě, kdežto klasické metody k aktuální instanci. Z toho plyne i jejich využití. Pokud potřebujete používat metodu globálně nezávisle na instancích, použijte statické metody. Pokud v metodě potřebujete používat atributy, které se vztahují k určité instanci, použijte klasické metody.
Toto téma je uzamčeno. Odpověď nelze zaslat.