美文网首页
PHP单例模式

PHP单例模式

作者: tarscoding | 来源:发表于2018-06-08 14:26 被阅读18次

    问:什么是单例模式?

    单例模式(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

    相关文章

      网友评论

          本文标题:PHP单例模式

          本文链接:https://www.haomeiwen.com/subject/erqasftx.html