<?php
class DBAccess {
private static $me = null;
public static function getInst() {
if ( is_null(self::$me) ) {
echo "create a new object";
self::$me = new DBAccess;
// do some connection work
} else {
echo "retrive a old one";
}
return self::$me;
}
}$a = DBAccess::getInst();
?>每一次访问这个页面都是返回“create a new object”,如果想要让它返回"retrive a old one"应该怎么做呢?
class DBAccess {
private static $me = null;
public static function getInst() {
if ( is_null(self::$me) ) {
echo "create a new object";
self::$me = new DBAccess;
// do some connection work
} else {
echo "retrive a old one";
}
return self::$me;
}
}$a = DBAccess::getInst();
?>每一次访问这个页面都是返回“create a new object”,如果想要让它返回"retrive a old one"应该怎么做呢?
我已经做过判断了
to cenzige
我每次刷页面 http://localhost/test.php
都会打印“create a new object”
所以 is_null(self::$me) 这句返回是true
class Singleton
{
private static $instance; private function __construct()
{
} public static function getInstance()
{
if(self::$instance == null)
{
self::$instance = new Singleton();
} return self::$instance;
}
}
?>
$b = DBAccess::getInst(); 第二次执行就会显示“retrive a old one”了.
分析:
因为“private static $me = null; ”,$me是静态的,每次执行后会存储它的值,所以只要执行第二次或更多时,$me便不是null,也便会显示你想要的结果了
我希望用多个客户端访问这同一个页面,来让他返回“retrive a old one”
请问是否有方法?
static变量只是在当前脚本下有效,所以当你访问一次(刷新一次浏览器)的时候之前的static已经失效了,$me的值在每次访问的时候值都是 null 所以会有这种结果你可以在一次脚本中再创建个变量测试一下就知道了
class DBAccess {
private static $me = null;
public static function getInst() {
if ( is_null(self::$me) ) {
echo "create a new object";
self::$me = new DBAccess;
// do some connection work
} else {
echo "retrive a old one";
}
return self::$me;
}
}
$b = DBAccess::getInst();
$c = DBAccess::getInst();
| 我希望用多个客户端访问这同一个页面,来让他返回“retrive a old one”
| 请问是否有方法?
session_start();class DBAccess {
private static $me = null;
public static function getInst() {
self::$me=unserialize($_SESSION['me']);
if ( is_null(self::$me) ) {
echo "create a new object";
self::$me = new DBAccess;
$_SESSION['me']=serialize(self::$me);
// do some connection work
} else {
echo "retrive a old one";
}
return self::$me;
}
} $a = DBAccess::getInst();
?>
如果想保存非resource类的对象或者变量,可以用序列化以后存到session或者数据库或者文件里.