Autor | Zpráva | ||
---|---|---|---|
rexi Profil * |
#1 · Zasláno: 19. 2. 2012, 15:00:30
Zdravim,
mám třídu, která funguje jako model. Obsahuje metody, které se volají staticky. Výstup z těchto metod potřebuju cachovat, například do nějaké noSQL db. Jakým způsobem mohu získat data na výstupu této metody? a dále, jakým způsobem, pokud mám výsledek cachovaný neprovádět kód metody ale rovnou vrátit uložený výsledek? Napadá mě jedině využít metody __call pro druhou otázku, ale na první mě nic nenapadá. Mám samozřejmě zájem udělat to automaticky, tzn abych nemusel přidávat nějaký kód do metod apod. Děkuji za pomoc. |
||
Nox Profil |
#2 · Zasláno: 19. 2. 2012, 15:47:48
rexi:
„mám třídu, která funguje jako model“ to je něco jako "mám třídu, která funguje jako backend"... ale tipnu si, že jde hlavně o načítání dat z databáze „Jakým způsobem mohu získat data na výstupu této metody“ To záleží co ta funkce dělá. Pokud výsledek vrací, tak si ho prostě přiřadíš. Pokud pracuje s referencí ... tak vezmeš tu proměnnou. Pokud něco vypisuje, použiješ ob_start(), ob_get_content() a ob_end_clean() (aspoň v docs jsem neviděl, že by get_clean měl ukončovat bufferování) Pokud funkce přímo výsledek někam zapisuje ... tak už to začíná být problémovější a musíš si ten výsledek od tama získat - anebo (o něco lepší je) to přepsat do dvou funkci kdy jedna vrací výsledek a druhá zapíše atd.? „jakým způsobem, pokud mám výsledek cachovaný neprovádět kód metody ale rovnou vrátit uložený výsledek“ wrapper třídu a pracovat s ní ... pokud teda nechceš upravovat metody class WrapperClassX metoda if( polozka_je_v_cache ) return polozka_v_cache; else { vysledek = ClassX(...); zapis vysledek do cache; return vysledek } __call by šlo myslim pro oboje, plus se využije call_user_func/call_user_func_array Když je to statické, budeš muset nejspíš popřepisovat (ale může pomoct nějaké find/replace přes regulární výrazy (anebo několikrát normálně) na projekt (nebo dotyčné složky)) názvy tříd ve voláních Být to instančně, tak se to dělá samozřejmě jednodušej |
||
Časová prodleva: 12 let
|
0