1、模式定义
简单说来,单例模式的作用就是保证在整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个,同时这个类还必须提供一个访问该类的全局访问点。
常见使用实例:
- 数据库连接
- 日志记录器(如果有多种用途使用多例模式)
- 锁定文件。
单例模式三大要求:
(1). 需要一个保存类的唯一实例的静态成员变量,这里用的 private static $instance;
(2). 构造函数和克隆函数必须声明为私有的,防止外部程序new类从而失去单例模式的意义:
(3). 必须提供一个访问这个实例的公共的静态方法(通常为getInstance方法),从而返回唯一实例的一个引用
单例模式在PHP中的应用场合:
(1)、应用程序与数据库交互
一个应用中会存在大量的数据库操作,比如过数据库句柄来连接数据库这一行为,使用单例模式可以避免大量的new操作,因为每一次new操作都会消耗内存资源和系统资源。
(2)、控制配置信息
如果系统中需要有一个类来全局控制某些配置信息,那么使用单例模式可以很方便的实现.
2、示例代码
Singleton.php
<?php
namespace Singleton;
/**
* Singleton类
*/
class Singleton
{
/**
* @var Singleton reference to singleton instance
*/
private static $instance;
/**
* 通过延迟加载(用到时才加载)获取实例
*
* @return self
*/
public static function getInstance()
{
if (null === static::$instance) {
static::$instance = new self();
}
return static::$instance;
}
/**
* 构造函数私有,不允许在外部实例化
*
*/
private function __construct()
{
}
/**
* 防止对象实例被克隆
*
* @return void
*/
private function __clone()
{
}
}
3、测试代码
$class = Singleton::getInstance();