我在PHP中编写网站后端,我需要在类中封装$ _SESSION。 我已经让我的Session类成为单例,但我无法使用它。PHP对象单例不工作
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 ]);
}
}
工作正常95%的时间。但是occasionnaly当调用var_dump(Session::singleton());
输出:object(Session)#2 (0) { }
在我看来,很明显,它使我的会话类的其他实例,但我看不出它究竟是如何是可能的。
非常感谢!
是的,没有理由在那里。代码与PHP4不兼容,所以没有理由拥有PHP4风格的构造函数。 – 2009-12-03 17:00:27
谢谢,我会删除它,但它只在那里出于修复原因。另一个网站建议编写来解决这个问题。 问题仍然存在。 – Duguigne 2009-12-03 17:15:00