Nekonzistence mezi cache a session
- David Grudl
- Nette Core | 8218
Správa cache i session použivá velmi podobný systém jmenných prostorů. Obojí ale používá jiný přístup k jednotlivým položkám:
$cache = Environment::getCache('namespace');
$cache['data'] = $myData;
$cachedData = $cache['data'];
// vs.
$session = Environment::getSession('namespace');
$session->o = 'orange';
echo $session->o;
Asi by to chtělo sjednotit. Přičemž kompromisní cesta, kdy by obojí podporovalo oba způsoby, se mi moc nezamlouvá.
- Honza Marek
- Člen | 1664
Já jsem v tomhle rozmazlenej z javascriptu, tak by mi nevadil ten „kompromisní“ přístup.
- phx
- Člen | 651
Pod heslem „nenutit uzivatele“ pouzivat konkretni zpusob bych byl pro oboje. Nevim jak to mas presne implementovany, ale mohlo by se hodit prochazet to jak pole. Nebo to ten objekt take umoznuje?
Kdyz se na to zase podivam ze zvyklosti v PHP bez frameworku tak se session se pracuje jako s polem. Takze tam bych pole urcite zachoval.
Neni zde neco divneho? Nevim nezna (jeste nepouzito) , ale tahle by mi to prislo logictejsi!
$session = Environment::getSession('namespace');
$session->o = 'orange';
echo $session->o;
// misto
$session = Environment::getSession('namespace');
$namespace->o = 'orange';
echo $namespace->o;
- David Grudl
- Nette Core | 8218
Ještě takto – při používání session je klíč obvykle pevný, při
používání cache zase většinou proměnný. A je šikovnější psát
$session->userId
než $session->['userId']
,
naopak zase $cache[$key]
je lepší než
$cache->$key
. Proto ten rozdílný přístup. Teprve při
školení jsem si uvědomil, že to může být docela matoucí.
- pmg
- Člen | 372
Napadají mě argumenty, proč v obou případech použít přístup přes
pole. Když vidím $session->o
, může to být proměnná
objektu, volání funkce $session->getO()
nebo právě ta
session proměnná. V případě $session['o']
je jasnější,
o co jde.
Souhlasím s Davidovým argumentem, ale jak sám píše, jedná se
o většinu případů, ne o všechny. Přiznám se, že konstrukci
$session->['userId']
jsem dnes viděl poprvé, a pokud bych
musel řešit právě ten vzácný případ, přivedl by mě do rozpaků.
(Jasně, moje blbost.)
Ještě tady asi nezaznělo, že se ArrayAccess
používá také
u kolekcí a routeru.