PHP单例模式

问:什么是单例模式?

单例模式(Singleton):用于为一个类生成一个[全局][唯一]的对象:目的是复用以及不可修改性,可以理解为全局静态变量(从语言层面,任何对象都是一种有较复杂数据结构变量)
举例:最常用的地方是数据库连接。 使用单例模式生成一个对象后,该对象可以被其它众多对象所使用。

作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类。可以看出实现单例的一个隐藏的细节,就是访问控制,即private,protect,public的使用

单例模式(singleton)有三个特点
1、一个类只能有一个实例
2、它必须自行创建这个实例
3、它必须自行向整个系统提供这个实例

/**
 * 单例类
 * Singleton.class
 */
class Singleton  
{  
   /**
    * 静态成品变量 保存全局实例
    */
    private static $_instance = NULL;
    
     /**
      * 私有化默认构造方法,保证外界无法直接实例化
      */
       private function __construct() 
       {
    
       }
       
    /**
      * 静态工厂方法,返还此类的唯一实例
      */
     public static function getInstance() {
      if (is_null(self::$_instance)) {
       self::$_instance = new Singleton();
       
       // 或者这样写
       // self::$_instance = new self();
      }
     
      return self::$_instance;
     }
     
   /**
    * 防止用户克隆实例
    */
     public function __clone(){
      die('Clone is not allowed.' . E_USER_ERROR);
     }
     
  /**
   * 测试用方法
   */
   public function test()
   {
      echo 'Singleton Test OK!';
   }
     
}  

/**
 * 客户端
 */
class Client {
 
  /**
  * Main program.
  */
 public static function main() {
  $instance = Singleton::getInstance();
  $instance->test();
 }
}
 
Client::main();

具体应用:
在laravel框架的初始化过程中大量使用单例模式,初始化了一些核心服务


image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 单例模式是一种常见的设计模式,在计算机系...
    打工是不可能打工的1阅读 3,878评论 0 4
  • 一、单例模式 通俗地说就是实例化出来的对象是唯一的。 所有的单例模式至少拥有以下三种公共元素: 1. 它们必须拥有...
    叶惜朝阅读 3,437评论 0 0
  • 特点: 1:一个类只有一个对象 2:必须是类内部自行创建这个对象 3:向整个系统提供这个对象 实现过程: 1:类的...
    winter_li阅读 1,111评论 0 0
  • 1.单例模式概述 (1)引言 单例模式是应用最广的模式之一,也是23种设计模式中最基本的一个。本文旨在总结通过Ja...
    曹丰斌阅读 8,059评论 6 47
  • 摘要:设计模式之一:单例模式目录介绍1.单例模式介绍2.单例模式定义3.单例模式使用场景4.单例模式的实现方式 4...
    肆虐的悲傷阅读 3,311评论 0 2