单例模式
什么是单例模式?
- 顾名思义:单个实例模式。最直接的描述是:在一个进程或一个线程中,只存在一个类的实例。
应用场景?
- 1、系统全局生命周期内,需要共用某个全局对象、变量。
- 2、为降低高频实例创建而应用。
注意事项
- 由于一个进程内可能会多次访问单例对象,请注意对象上下文的更新。(例如:对象内的某个值初始是 1,有可能会被某次调用修改为 2,则此值在全局范围内会变成 2)
代码实例
Config.php
<?php
namespace com\wdqz\singleton;
/**
* 单例模式
* - 本类以常见的系统配置举例
*
* @author woodhead
* @date 2023年11月19日19:20:18
*/
class Config
{
/**
* @var array $config 配置类内置对象,用于保存全局数据
*/
private $config = [];
/**
* @var Config $instance 单例对象
*/
private static $instance;
/**
* 构造函数
* - 声明为 private,禁止外部直接实例化
*/
private function __construct()
{
}
/**
* 为全局提供的Config类的实例
* - 通常情况下,单例模式都采用懒汉单例模式
*
* @return Config|self
*/
public static function getInstance()
{
if (empty(self::$instance)) {
self::$instance = new self;
}
return self::$instance;
}
/**
* 设置配置项
*
* @param $key
* @param $val
* @return void
*/
public function setConfig($key, $val)
{
$this->config[$key] = $val;
}
/**
* 获取配置项
*
* @param $key
* @return mixed|string
*/
public function getConfig($key)
{
return isset($this->config[$key]) ? $this->config[$key] : '';
}
}
test.php
<?php
require_once('../../../autoloader.php');
use com\wdqz\singleton\Config;
$config = Config::getInstance();
$config->setConfig('host', 'localhost');
echo $config->getConfig('host').PHP_EOL;
$config->setConfig('host', '127.0.0.1');
echo $config->getConfig('host').PHP_EOL;
作者:Wolf 创建时间:2023-11-19 18:31
最后编辑:Wolf 更新时间:2023-11-27 23:47
最后编辑:Wolf 更新时间:2023-11-27 23:47