单例模式示例
程序员文章站
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);
上一篇: java单例模式的正确写法
下一篇: 设计模式---单例模式示例代码