Hi peepz,

Ik ben een Request class aan het maken. Via deze class kan ik bijv. het domein van de opgevraagde URL opvragen, of het subdomein, en of het een beveiligde (https) verbinding betreft. De gegevens haal ik op uit de $_SERVER array. Nu had ik gewoon allemaal public funtcions gemaakt. Echter... ik realiseer me ineens dat gedurende 1 request de $_SERVER array altijd hetzelfde is. Het zou dan raar zijn als ik telkens als ik de Request class nodig heb "new Request()" zou doen.

Nu vraag ik me af wat volgens jullie de beste oplossing is. Ik zou een singleton kunnen maken, zodat je niet "$request = new Request()" doet, maar "$request = Request::getInstance()". Wat ik ook kan doen is iedere functie in de Request class static maken, zodat ik het domein bijv. als volgt opvraag: $domain = Request::getDomain();

Wat vinden jullie? En waarom?
Thanks voor de uitleg... maar dan blijft nog steeds mijn vraag:

Waarom doe je dit:

$session->setKey('user');
$session->ssetValue($user);

in plaats van dit:

$session->set('user', $user);

Wat is het verschil?

Daarnaast, als je dit doet:

$session->setKey('user');
$session->setValue($user);

Hoe weet de session class dan dat de key 'user' bij $user hoort?
Omdat Session 1 object is. Met alleen maar een key, value. Dus waar zou de key 'user' anders bij horen? $session->set($key, $value) kan in principe ook, het is maar net wat je zelf handiger/mooier vind. Ik zou zelf $session = new Session('key') doen, omdat een Sessie maar 1 key kan hebben, en die altijd geinitialiseerd moet worden.

Over het verschil tussen die twee raad ik je echt de tutorial op webdevils aan, hij beschrijft vooral het OO denken heel duidelijk en neemt je stap voor stap mee in een ontwikkel proces
Wacht even... je bedoelt dat de Session class slechts 1 key->value paar heeft?

Dus in 1 session object zit bijvoorbeeld alleen maar dit? $_SESSION['user'] met als waarde 'Piet'?

Ik weet wel hoe OOP werkt (ik zal je link zeker nog eens even doorlezen), maar ik ging er dus vanuit dat de class Session de volledige $_SESSION bevatte. Maar als ik het dus goed begrijp, bevat de Session class maar 1 key->value paar? Als dit zo is, dan verklaart dat volledig waarom ik het voorgaande niet begreep.

Graag je reactie.
Ja key => value, anders had de class wel SessionCollection of SessionList of zelfs Sessions geheten. Er is een verschil tussen begrijpen hoe classes werken en hoe je object georienteerd programmeerd
En met een SessionCollection oid beheer je dan al die aparte Session classes.
@NotMoose: het is gewoon een interpretatie verschil. Jij ziet een Session als een key=>value paar uit de $_SESSION array. Ik zag Session als de complete inhoud van de Session array.

@Raoul: nee, daar heb je dan de SessionManager weer voor. Not Moose bedoelt met SessionCollection de inhoud van de complete $_SESSION array.

Mja, het is maar net hoe je het beestje noemt.
Om het nog leuker te maken (en ozzie nog wat gekker) kan je in de SessionManager weer een SessionCollection gebruiken die de sessies vasthoudt binnen de klasse (precies zoals de ParameterBag van de request, om de topic titel maar weer eer aan te doen), maar dat vind ik zelfs weer een stapje te ver... ;)
Jaja, maak me maar gek... grrr... ik ga maar eens niet meer van die moeilijke vragen stellen voorlopig ;)

Toevoeging op 08/01/2013 22:48:23:

p.s. Zou je een Session class niet beter een SessionParameter class moeten noemen of iets dergelijks? Zodat duidelijk is dat deze niet de complete sessie bevat?
Ozzie, ik denk dat je een verkeerd begrip 'sessie' in je hoofd hebt. 1 sessie is namelijk die ene 'parameter' die jij bedoelt, niet die hele $_SESSIE array.
Ja, dat komt omdat ik bij Sessie denk aan de $_SESSION array. Voor jou is de Sessie een veld uit de array. Dus jij zal het bijvoorbeeld hebben over de sessie 'user', terwijl ik denk dat je het over de complete array hebt als je het over sessie hebt.

Toch vreemd waar die verwarring eigenlijk vandaan komt. Maar normaal gesproken als je praat over de sessie, dan heb je het toch altijd over de hele array? Je start met session_start toch ook een sessie (en geen sessies)?

Reageren