PHP设计模式-单例模式

前端之家收集整理的这篇文章主要介绍了PHP设计模式-单例模式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

<p style="margin-left: 30px">一直以来都是在写项目却从来没有仔细分析过什么是单例模式,单例模式分为几种,单例模式有什么特点。今天随便记录一个随笔,全当是复习复习做个笔记。


<p style="margin-left: 30px">单例模式要确保某个类只有一个实例,而且自动实例化并向整个系统提供实例。单例模式分为3种:饿汉单例模式、懒汉单例模式、登记式单例模式。


<p style="margin-left: 30px">单例模式有3个特点:

  1. 只有一个实例
  2. 必须自行创建这个实例
  3. 必须给其他对象提供这个实例

数据库连接,这种耗费资源的操作。类的结构分为3私1公/4私1公。下面就编写一个简单的单例模式:

PHP = 1 = 方法 __construct( '我是私有构造方法
' 方法 方法 ((self:: self:: = self:: = db:: ( = db:: ();

PHP设计模式-单例模式" src="/res/2019/03-02/08/c1856ba11afd6c434d1742970152e90d.png" alt="MysqL连接单例模式">

<p style="margin-left: 30px">可以看到两次执行的句柄都一样是同一个实例。接下来把这个单例完善一下变成一个数据库连接的单例模式:


<div class="cnblogs_code">

 PHP
 
  
     
       
       =         'host' => 'localhost',         'username' => 'root',         'password' => 'root',         'databases' => '',         'port' => 3306,         'conding' => 'utf8'
  
 
     
        =  
      方法
  数据库配置
     
       __construct(         
         (() && (             
             ->config = (->config,          数据库连接
         ->link = MysqLi_connect(->config['host'],->config['username'],->config['password'],->config['databases'],->config['port' 
         输出连接错误
         -> 
         (->config['databases'              = ->config['conding'             ->query("SET NAMES '{}'"          
          ->  
      方法 
      
       
  
           
       
  
      方法
  数据库配置
     
        getInstance(         
         ((self::             自动实例化,给构建方法传$config配置
             self:: =  self(          
          self::  
      sql
 sql语句
     
       query(         ->result = MysqLi_query(->link,          ->  
      数据库
 数据库名称
     
       select_db(         ->result = MysqLi_select_db(->link,          = ->config['conding'         ->query("SET NAMES '{}'"          ->  
      查询一条或多条数据
 sql sql语句
 MysqLI_NUM、MysqLI_ASSOC、MysqLI_BOTH
     
       fetch_array(sql, =MysqLI_BOTH) {
          = ->query(sql          = MysqLi_fetch_array(,         (->num_rows() > 1             (                 ->rows[] =           }              ->rows =            ->  
       num_rows(         ->result = MysqLi_num_rows(          ->  
      输出连接错误
     
               (MysqLi_connect_errno(->              'MysqL数据库连接失败,错误代码ERROR:' . MysqLi_connect_errno() . '
' 关闭数据库连接 ->result = MysqLi_close(-> -> = 'host' => '172.17.0.2', 'username' => 'root', 'password' => 'cuiyuanxin66666', @H_403_537@ 'nndb' = db::getInstance( = db::getInstance( ( === '一致' '
' } '不一致' '
' 数据库hkxy ->select_db('hkxy' sql = 'select * from qii_admin_menu limit 1' = ->fetch_array(sql,MysqLI_ASSOC); ( '
-----------------------------------------
' ( '
-----------------------------------------
' ->select_db('nndb' sql = 'select * from niuniu_user limit 1' = ->fetch_array(sql,MysqLI_ASSOC); ();

数据库的单例模式就写完了,看一下执行结果:

PHP设计模式-单例模式" src="/res/2019/03-02/08/deca3e9be6f19b2238a92a79633ad745.png" alt="MysqL连接单例模式" width="1200">

代码来看两个实例对象完全一样。

代码已上传GitHub:https://github.com/cuiyuanxin/PHP-demo/blob/master/db.PHP

错误请评论提出,谢谢。

猜你在找的PHP相关文章