In mijn framework heb ik een wrapper geschreven om de session superglobal, met support voor verschillende savehandlers, zoals een databaseimplementatie.
Volgens mij heeft het Zend Framework zelfs iets met "namespaces" gedaan, wat opzich ook een aardig idee is. Ik gebruik iets soortgelijks.
Pseudo-code (PHP5.3).
<?php
class Session {
public function createSection($id);//maakt sectie aan, $_SESSION[$id] = array(), geeft Section object terug
public function destroy();//session_destroy()
public function regenerateId();//session_regenerate_id
public function start(); //session_start()
}
class Section {
public function __get($key);
public function __isset($key);
public function __set($key, $value);
public function __unset($key);
}
?>
Daar komt het ongeveer op neer. Section is dus niets meer dan een storage object, welke momenteel (nog) wat goochelt met de magische functies.
Nogmaals, volgens mij werkt het ongeveer hetzelfde als bij het Zend Framework.
Als ik het goed begrijp heb je een namespace session en een class erbij, nu kun je dus vanuit /Countable, /IteratorAggregate en /Session je session class aanroepen.
Heb het voorbeeld in mijn vorige post iets aangepast, wat makkelijker gemaakt. De namespaces c.q. interfaces zijn niet echt van kritisch belang.
Het is opzich mogelijk om beide objecten Session en Section in elkaar te voegen, dan krijg je zoiets als jij ongeveer voorstelde in de beginpost.
<?php
$session = new Session();
$session->start();
function login(Session $session) {
...
$session->save('userid', 1);
...
}
function logout(Session $session) {
...
$session->delete('userid');
$session->destroy();
...
}
?>