一、什么是单例模式?
1、含义
单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的。
2、单例模式的三个元素:
(1)需要一个保存类的唯一实例的静态成员变量,如下代码:
private static $_instance;
(2)构造函数和克隆函数必须声明为私有的,防止外部程序new类从而,让单例模式的失去了意义:
private function __construct() { } private function __clone() { }
(3)必须拥有一个访问这个实例的公共的静态方法(通常为getInstance方法),从而返回唯一实例的一个引用
public static function getInstance($instance=''){ if(!$instance){ $instance = __CLASS__; } if(!isset(self::$_instances[$instance])){ self::setInstance($instance, new $instance()); } return self::$_instances[$instance]; }
二、为什么要使用单例模式?
1、优点:单例模式可以避免大量的new操作,因为每一次new操作都会消耗内存资源和系统资源。
2、缺点:在PHP中,所有的变量无论是全局变量还是类的静态成员,都是 页面级的,每次页面被执行时,都会重新建立新的对象,都会在页面执行完毕后被清空,这样似乎PHP单例模式就没有什么意义了,所以PHP单例模式我觉得只 是针对单次页面级请求时出现多个应用场景并需要共享同一对象资源时是非常有意义的。
三、单列模式实战
/*公共单列模式类*/
class Core { public static function getInstance($instance=''){ if(!$instance){ $instance = __CLASS__; } if(!isset(self::$_instances[$instance])){ self::setInstance($instance, new $instance()); } return self::$_instances[$instance]; } } /*a类 __CLASS__魔术变量将自身传过去*/ class a { public static function getInstance() { return Core::getInstance(__CLASS__); } } /*b类 __CLASS__魔术变量将自身传过去*/ class b { public static function getInstance() { return Core::getInstance(__CLASS__); } }
发表评论