Autor Zpráva
Tori
Profil
Pěkný večer.
Mám nějakou metodu, kterou budu v cyklu hodněkrát volat. Metoda si potřebuje předzpracovat a někam odložit balík dat - kam to bude vhodnější dát? Jsou asi 3 možnosti (velmi zjednodušeně):

var.1
class Foo
{
    public function bar($id) 
    {
        static $cache;
        if (empty($cache)) {
            // nějaké zdlouhavé tahání a přeskládávání dat
        }
        return $cache[$id];
    }
}

var.2
class Foo 
{
    private $cache;
    public function bar($id) 
    {
        if (empty($this->cache['bar'])) {
            // nějaké zdlouhavé tahání a přeskládávání dat
        }        
        return $this->cache['bar'][$id];
    }
}

var.3
class Foo
{
    static private $cache;
    public function bar($id) 
    {
        if (empty(self::$cache['bar'])) {
            // nějaké zdlouhavé tahání a přeskládávání dat
        }        
        return self::$cache['bar'][$id];
    }
}
IMHO mezi variantou 2 a 3 není pro mě rozdíl, protože instance třídy bude pouze jedna. Pokud to bude proměnná třídy, může ji používat více podobných metod (proto 1 úroveň pole navíc). Měli byste nějaký důvod (klidně i čitelnost kódu), proč si vybrat některou konkrétní variantu, anebo je to jedno?
Jan Tvrdík
Profil
Tori:
Měli byste nějaký důvod (klidně i čitelnost kódu), proč si vybrat některou konkrétní variantu, anebo je to jedno?
Je to jedno, ale použil bych variantu (1) pokud bych takto chtěl cachovat výsledek jedné metody, variantu (2) pokud bych cachovat výsledek více souvisejících metod a variantu (3) pokud bych potřeboval řešit cachování napříč instancemi.
Joker
Profil
Tori:
Já bych preferoval 2.

Jan Tvrdík:
(3) pokud bych potřeboval řešit cachování napříč instancemi.
Neměla by v takovém případě být static i ta metoda?
Resp. se mi úplně nezdá, aby metoda byla na instanci a cache jejích výsledků na třídě přes všechny instance.
Tori
Profil
Jan Tvrdík, Joker:
Děkuju.

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