Autor Zpráva
eldnah
Profil *
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
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 *
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
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
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 *
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
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
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 *
Ten prostor v tomhle podání je prostý $_SESSION['prostor'];
eldnah
Profil *
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


Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: