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]; } } |
||
Jan Tvrdík Profil |
#2 · Zasláno: 19. 8. 2013, 20:29:16
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 |
#3 · Zasláno: 19. 8. 2013, 20:36:32
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 |
#4 · Zasláno: 21. 8. 2013, 15:00:17
Jan Tvrdík, Joker:
Děkuju. |
||
Časová prodleva: 11 let
|
0