价格: ¥ 59.00

分类: 商业资源 淘客推广

发布: 2019-11-04 16:30:25

更新: 2019-11-19 17:01:57

授权: 免费版

程序语言: PHP + MySQL/MariaDB

演示:

如果下载的源码需要作者授权,请更换源码。本站免费分享资源不会增加授权

本篇文章给大家带来的内容是关于php单例模式的讲解(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

 

单例模式是一种比较常用的设计模式,在很多框架中可以看到它的身影。通过单例模式可以确保类只有一个实例化,从而方便对实例个数的控制并节约系统资源。

<?php  use Exception;  class Singleton {     /**      * 对象实例      * @var object      /     public static $instance;          /**      * 获取实例化对象      /     public static function getInstance()     {         if (!self::$instance instanceof self) {             self::$instance = new self();         }                  return self::$instance;     }          /**      * 禁止对象直接在外部实例      /     private function __construct(){}          /**      * 防止克隆操作      /     final public function __clone()     {         throw new Exception('Clone is not allowed !');     } }

一个系统中可能会多次使用到单例模式,为了更加方便的创建,可以试着建立一个通用的抽象:

// SingletonFacotry.php <?php  use Exception;  abstract class SingletonFacotry {     /**      * 对象实例数组      * @var array      /     protected static $instance = [];          /**      * 获取实例化对象      /     public static function getInstance()     {         $callClass = static::getInstanceAccessor();         if (!array_key_exists($callClass, self::$instance)) {             self::$instance[$callClass] = new $callClass();         }                  return self::$instance[$callClass];     }          abstract protected static function getInstanceAccessor();          /**      * 禁止对象直接在外部实例      /     protected function __construct(){}             /**      * 防止克隆操作      /     final public function __clone()     {          throw new Exception('Clone is not allowed !');     } }
// A.php  <?php  class A extends SingletonFactory {     public $num = 0;      protected static function getInstanceAccessor()     {         return A::class;     } }  $obj1 = A::getInstance(); $obj1->num++; var_dump($obj1->num); // 1 $obj2 = A::getInstance(); $obj2->num++; var_dump($obj2->num); // 2