单例模式,保证一个类仅有一个实例,并且提供一个访问它的全局访问点。
单例模式有三个特点:
- 一个类只有一个实例
- 类必须自行创建这个实例
- 必须自行向整个系统提供这个实例
单例模式的优点:
- 对唯一实例受控访问
- 缩小命名空间,单例模式是对全局变量的一种改进,避免了哪些存储唯一实例的全局变量污染命名空间
- 允许对操作和表示的净化,单例类可以有子类,而且用这个扩展类的实例来配置一个应用是和容易的,可以用你所需要的类的实例在运行时刻配置应用
- 允许可变数目的实例(多例模式)
- 比类操作更灵活
/** * 单例(Singleton)模式 */ class Singleton { //静态成员变量,保存全局实例 private static $_instance = NULL; /** *私有化默认构造方法,保证外界无法直接实例化 */ private function __construct() { } /** *静态工厂方法,返回此类的唯一实例 */ public static function getInstance() { if(is_null(self::$_instance)) { self::$_instance = new Singleton(); } return self::$_instance; } /** * 防止用户克隆实例 */ public function __clone() { die('Clone is not allowed'.E_USER_ERROR); } /* * 测试 */ public function test() { echo 'Singleton Test'; } } class Clinet { public static function main() { $instance = Signleton::getInstance(); $instance->test(); } }