• wordpress CMS主题:ssmay主题wordpress CMS主题:ssmay主题
  • 首页 > PHP开发 > php编程设计模式之单例模式

    php编程设计模式之单例模式

    作者: 分类:PHP开发 点击: 208 次
    wordpress CMS主题:ssmay主题

      应用场景:

      数据库连接这种比较耗费资源的操作;
      我们希望整个应用只实例化一个;

      结构:4私1公;

      私有化构造方法: 防止使用 new 创建多个实例;
      私有化克隆方法: 防止 clone 多个实例;
      私有化重建方法: 防止反序列化
      私有化静态属性: 防止直接访问存储实例的属性

      示例

      <?php
      namespace Baijunyao\DesignPatterns\Singleton;

      /*** 普通类
      * Class Db1
      * @package Baijunyao\DesignPatterns\Singleton
      */
      class Db1{

      public static $instance = null;
      public static function getInstance() {

      if (null === static::$instance) {

      static::$instance = new static();

      }
      return static::$instance;

      }
      public function __construct() { }
      public function __clone() { }
      public function __wakeup() { }

      }
      $db1 = new Db1();
      $db2 = new Db1();
      $db3 = clone $db2;
      $db4 = Db1::getInstance();
      $db5 = unserialize(serialize($db4));

      var_dump($db1);
      echo '<hr>';
      var_dump($db2);
      echo '<hr>';
      var_dump($db3);
      echo '<hr>';
      var_dump($db4);
      echo '<hr>';
      var_dump($db5);
      echo '<hr>';

      /** 单例
      * Class Db2
      * @package Baijunyao\DesignPatterns\Singleton
      */
      class Db2{

      private static $instance = null;
      public static function getInstance() {

      if (null === static::$instance) {

      static::$instance = new static();

      }
      return static::$instance;

      }
      /*** 防止使用 new 创建多个实: Db2 constructor.*/
      private function __construct() { }

      /** 防止 clone 多个实例*/
      private function __clone() { }

      /*** 防止反序列化*/
      private function __wakeup() { }

      }

      $db6 = Db2::getInstance();
      $db7 = Db2::getInstance();

      var_dump($db6);
      echo '<hr>';
      var_dump($db7);
      echo '<hr>';

      github:https://github.com/baijunyao/design-patterns/tree/master/singleton

      php编程设计模式之单例模式

      运行代码我们可以看到;
      普通类DB1的句柄每个都是不一样的;
      一共5个实例;
      而单例这两个的句柄都是 27 ;
      一直是一个实例;(转自:白俊遥博客)



      QQ二维码

    文章作者:honor
    本文地址:http://wanlimm.com/77201808236664.html
    版权所有 © 转载时必须以链接形式注明作者和原始出处!

    上一篇:
    下一篇:
    wordpress CMS主题:ssmay主题

    或许你会感兴趣的文章:

    一条回应:“php编程设计模式之单例模式”

    1. test0007说道:

      下载视频,没有几分,发几条消息!

    发表评论

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

    This site uses Akismet to reduce spam. Learn how your comment data is processed.