Je suis en train de programmer un backend de site web en PHP et j'ai besoin d'encapsuler $ _SESSION dans une classe. J'ai fait de ma classe Session un singleton mais j'ai du mal à l'utiliser.Objet PHP Singleton ne fonctionne pas
class Session
{
private static $instance;
public static $sessionID;
private function __construct()
{
session_start();
self::$sessionID = session_id();
}
public function Session() {
return Session::singleton();
}
public static function singleton()
{
if (!isset(Session::$instance)) {
Session::$instance = new Session();
}
return Session::$instance;
}
public function destroy()
{
foreach ($_SESSION as $var => $val) {
$_SESSION[$var] = null;
}
session_destroy();
}
public function __clone()
{
trigger_error('Clone is not allowed for '.__CLASS__,E_USER_ERROR);
}
public function __get($var)
{
return $_SESSION[$var];
}
public function __set($var,$val)
{
return ($_SESSION[$var] = $val);
}
public function __destruct()
{
session_write_close();
}
public function exist($var) {
return isset($_SESSION[ $var ]);
}
}
Fonctionne correctement 95% du temps. Mais quand j'invoque occasionnellement var_dump(Session::singleton());
sortie: object(Session)#2 (0) { }
Il me semble évident qu'il fait une autre instance de ma classe de session, mais je ne vois pas exactement comment il est possible.
Merci beaucoup!
Oui, il n'y a aucune raison que cela soit là. Le code n'est pas compatible avec PHP4 donc il n'y a aucune raison d'avoir un constructeur de style PHP4. –
Merci, je vais l'enlever mais c'est là seulement pour raison de fixation. Un autre site a suggéré d'écrire pour résoudre le problème. Le problème est toujours là. – Duguigne