Nekonzistence mezi cache a session

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
David Grudl
Nette Core | 8218
+
0
-

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á.

Jod
Člen | 701
+
0
-

Hen to prvé mi pripomenulo indexery v C# :) .
Možno je lepší objektový zápis nevim, ale lepšie sa mi zapisuje ako pole. Zvyk z $_SESSION[]

Honza Marek
Člen | 1664
+
0
-

Já jsem v tomhle rozmazlenej z javascriptu, tak by mi nevadil ten „kompromisní“ přístup.

phx
Člen | 651
+
0
-

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
+
0
-

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í.

Jod
Člen | 701
+
0
-

No mna to nemetie, zdá sa mi to celkom rozumné :)

A.
Člen | 87
+
0
-

Tak tak, duvod, ktery uvadis je velmi rozumny na to, aby to bylo „nekonzistentni“.

pmg
Člen | 372
+
0
-

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.

Tomik
Nette Evangelist | 485
+
0
-

Osobně mi to taky nepřijde matoucí. Ale kdyby se muselo něco změnit, jsem pro, aby se k obému přistupovalo jako k poli.