1. 养乐多|杨城的个人博客首页
  2. 技术杂谈
  3. PHP

PHP设计模式之:单例模式

单例类:
1.构造函数需要标记为private(访问控制:防止外部代码使用new操作符创建对象),单例类不能在其他类中实例化,只能被其自身实例化;
2.拥有一个保存类的实例的静态成员变量;
3.拥有一个访问这个实例的公共的静态方法(常用getInstance()方法进行实例化单例类,通过instanceof操作符可以检测到类是否已经被实例化)。

单例模式的要点有三个:
一是某个类只能有一个实例;
二是它必须自行创建这个实例;
三是它必须自行向整个系统提供这个实例。
另外,需要创建__clone()方法防止对象被复制(克隆)

class MysqlDB {
    //私有的成员用来保存类的实例
    private static $instance;
   
    //私有的构造函数阻止在类的外部实例化
    private function __construct() {
   
    }
   
    //私有的__clone()阻止clone对象
    private function __clone() {
   
    }
   
    //公有的方法用来获取类的实例
    public static function getInstance() {
        if(!self::$instance instanceof self ) {
            self::$instance=new self;
        }
        return self::$instance;
    }
}

/*
优点
一、实例控制
单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。
二、灵活性
因为类控制了实例化过程,所以类可以灵活更改实例化过程。
 
缺点
一、开销
虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销。可以通过使用静态初始化解决此问题。
*/

为什么要使用PHP单例模式?
1.php的应用主要在于数据库应用, 所以一个应用中会存在大量的数据库操作, 使用单例模式, 则可以避免大量的new 操作消耗的资源;
2.如果系统中需要有一个类来全局控制某些配置信息, 那么使用单例模式可以很方便的实现. 这个可以参看ZF的FrontController部分;
3.在一次页面请求中, 便于进行调试, 因为所有的代码(例如数据库操作类db)都集中在一个类中, 我们可以在类中设置钩子, 输出日志,从而避免到处var_dump, echo。

原创文章,作者:iConan,如若转载,请注明出处:https://www.aspyc.com/archives/755.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据