首先,我定义个类,实现单例模式:(这里是简单一写,就是个最基本的单例)
class Demo
{
public static $instance;
private function __Construct()
{
//TODO
}
public static function getInstance()
{
if(!self::$instance){
self::$instance = new static();
}
return self::$instance;
}
public function call()
{
//其他方法
}
}
下面有两种方式实例化类:
1.在需要用的地方
$aa = Demo::getInstance();
$bb = Demo::getInstance();
$cc = Demo::getInstance();
这样调用肯定是没问题的,一般情况也是这样初始化。
2.定义一个普通类,写个函数初始化,保存在一个静态变量,如下:
类:
class Demo{
public function __Construct(){
//TODO
}
}
函数:
function get_obj(){
static $obj;
if($obj){
return $obj;
}else{
$obj = new Demo;
return $obj;
}
}
在需要调用的地方这样写:
$obj = get_obj();
$obj->call();
$obj2 = get_obj();
$obj2->call();
$obj3 = get_obj();
$obj3 = get_obj();
这样不是也只实例化一次这个类吗?
完善的单例应该是这样的
如果还要考虑到继承的话
get_obj()那种写法,也可以达到目的,但无法禁止new和clone,也就无法做到真正的单例