Autor | Zpráva | ||
---|---|---|---|
eldnah Profil * |
#1 · Zasláno: 31. 8. 2010, 00:58:27
Poraďte mi prosím s náledujícím problémem:
$sessions = Sessions->namespace('prostor'); // nastaví proměnnou $namespace v objektu Sessions, vrací objekt Sessions $sessions->set('session', 'text'); Výraz se podle mě bude interpretovat takto: První řádek nastaví namespace a pak vrátí objekt. Druhý nastaví session ve jmeném prostoru "prostor". Tady ale nastává kámen úrazu. Potřeboval bych aby se při provádění "$sessions->set('session', 'text')" nejprve interpretoval celý první řádek tzn. nejenom že se spustí funkce set na objektu, ale spustí se funkce namespace a pak funkce set. Důvodem je to, že se namespace může v průběhu skriptu měnit a tady bych potřeboval aby se konkrétní session provedla vždy v prostoru "prostor". Jak to udělat? |
||
Majkl578 Profil |
#2 · Zasláno: 31. 8. 2010, 01:28:21 · Upravil/a: Majkl578
Nejlepší asi bude, když jednotlivá namespace budou reprezentována objekty (tj. mít třídy Session a SessionNamespace). Odpadne tak ta starost o aktuální namespace. Můžeš se taky inspirovat existujícím kódem.
|
||
eldnah Profil * |
#3 · Zasláno: 31. 8. 2010, 01:39:40
To vypadá velice zajímavě a jednoduše. Nevýhodou je jen to, že co namespace to objekt. Pomocí jedné třídy to ale asi vyřešit nejde co?
|
||
Mastodont Profil |
#4 · Zasláno: 31. 8. 2010, 09:38:22
Potřeboval bych aby se při provádění nejprve interpretoval celý první řádek
Úplně nejjednodušší bude, když budeš vždy volat oba dva řádky těsně za sebou, čili nejdřív nastavíš namespace a pak spustíš set ... a když z toho uděláš jednu metodu, bude to ideální. |
||
joe Profil |
#5 · Zasláno: 31. 8. 2010, 10:13:31
eldnah:
„Důvodem je to, že se namespace může v průběhu skriptu měnit“ Máš tam snad nějaké asynchronní volání, aby se namespace změnil? Proč si jednoduše každé namespace neuložíš do jiné proměnné? $prostor = Sessions->namespace('prostor'); $prostor2 = Sessions->namespace('prostor2'); |
||
eldnah Profil * |
#6 · Zasláno: 31. 8. 2010, 13:22:25
Mastodont:
A co je rychlejší? Nastavovat při každém volání nový namespace nebo pro každý namespace vytvářet objekty? Počítám tam 20 prostorů, na každý tak cca 5 volání v průběhu skriptu. joe: Protože Sessions je singleton. |
||
AM_ Profil |
#7 · Zasláno: 31. 8. 2010, 21:38:14 · Upravil/a: AM_
eldnah:
„Protože Sessions je singleton.“ takže chceš říct, že $prostor = Sessions->namespace('prostor'); $prostor2 = Sessions->namespace('prostor2'); po zavolání tohoto bude v $prostor i $prostor2 to samé (druhým voláním se prostě Sessions nastaví i pro $prostor na prostor2)? pak to není singleton, ale blbě navržené. |
||
Mastodont Profil |
#8 · Zasláno: 31. 8. 2010, 22:10:30
Počítám tam 20 prostorů
Mohl bys nám prosím vysvětlit, k čemu ten prostor slouží? Jestli ten tvůj namespace je to samé co namespace z PHP 5.3, je opravdu tvoje aplikace tak velká, že vyžaduje 20 prostorů? Bejvávaly doby, kdy namespace nebyly a přesto vznikaly aplikace typu Joomla ... |
||
eldnah Profil * |
#9 · Zasláno: 31. 8. 2010, 22:41:44
Ten prostor v tomhle podání je prostý $_SESSION['prostor'];
|
||
eldnah Profil * |
#10 · Zasláno: 31. 8. 2010, 22:49:17
AM:
Právě že je to singleton. Pouze Session je samo o sobě singleton. Teoreticky je jedno zda se jedná o singleton nebo statickou třídu, u singletonu jdou ale metody hezky skládat za sebe. Uvedu příklad (velice zjednodušeně): class Sessions { private static $namespace; public function namespace($namespace) { self::$namespace = $namespace; return $this->NECOCOVYTVORIINSTANCI; } } ... a co se stane pokud provedu toto? $prostor = Sessions->namespace('prostor'); // nastaví $namespace na prostor a vrátí objekt $prostor2 = Sessions->namespace('prostor2'); // nastaví tomu samému objektu $namespace na prostor2 a je vymalováno |
||
Časová prodleva: 14 let
|
0