欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

单例模式示例

程序员文章站 2022-07-13 23:35:10
...
<?php

/**
 * 单例模式:三个私有(也可以4个私有[[unserialize()函数执行时候的__wakeup()魔术方法]])、一个公有、两个静态
 * 以一个DB类为例子
 * Class: Database
 * Date: 2021/5/18
 */
class Database{

    //`私有`的属性
    private $db = null;
    //私有的`静态`实例属性
    private static $instance = null;

    /**
     * `私有`的构造方法
     * 每次调用的该类的时候该方法会被使用
     * Database constructor.
     * @param array $config
     */
    private function __construct($config = [])
    {
        /**
         * 这里只是简单的进行示例
         * 正常的应该是 $this->db = new PDO();或者其他;
         */
        $this->db = '用户'.$config['db_user'].'链接'.$config['db_name'];
    }

    /**
     * 单例模式核心方法,用来获取该类实例
     * 最终实现等价于 $class = new Class();
     * Date: 2021/5/18
     * @param array $config
     * @return Database|null
     */
    public static function getInstance($config = [])
    {
        if (is_null(self::$instance)) {
            self::$instance = new self($config);
        }
        return self::$instance;
    }

    /**
     * 私有的克隆方法
     * 重写底层克隆方法,防止被克隆,保证唯一
     * Date: 2021/5/18
     */
    private function __clone()
    {
        // TODO: Implement __clone() method.
    }


}
//简单的参数例子
$config = [
    'db_name' => 'database',
    'db_user' => 'root'
];

$obj = Database::getInstance($config);

print_r($obj);