单实例模式是指在代码运行整个期间只允许某个类只有一个实例。像有些框架中的路由类、数据库连接类、配置文件类等都有用到单实例模式,这样的好处是节约系统开销,并且有些情况下能保正数据一致性。
/**
*单实例模式
*/
class Singleton{
/**
*使用私有的静态变量保存实例,防止外部修改。
*/
private static $instance;
private $time;
/**
*将构造方法限制为私有方法,防止随意新建实例
*/
private function __construct(){
$this->time = date('Y-m-d H:i:s');
}
/**
*将克隆方法限制为私有方法,防止实例被克隆
*/
private function __clone(){}
/**
*提供获得实例的唯一入口
*/
static function getInstance(){
if(!(static::$instance instanceof static)){ //到底是使用self还是static请参考另一博文
static::$instance = new static();
}
return static::$instance;
}
public function doAction(){
echo 'This instance was created at '.$this->time.'(Execute time:'.date('Y-m-d H:i:s').')<br>';
}
}
$singleton = Singleton::getInstance();
$singleton->doAction();
sleep(10);
$singleton->doAction();