设计模式-单例模式-php

单例模式 经常被提起,我写了一个测试代码,简单的读取config配置的。
就是一个请求过程中,这个类的实例可以是相同的话,可以写成单例模式,只要new 一次。
一般可以应用在 配置文件,log记录,数据库连接池,服务连接池这些方面。我就写一个最简单的例子

class ConfigSingleton
{
    public static $instance;
    public static $config;
    public static function getInstance()
    {
        if (null == static::$instance)
        {
            static::$instance = new static;
        }
        return static::$instance;
    }
    public function getConfig()
    {
        return $this->loadConfig();
        
    }
    public function loadConfig()
    {
        if (null == self::$config)
        {
            self::$config =  require_once(__DIR__ . "/../../../config/config.php");
        }
        return self::$config;
    }
    private function __construct()
    {
        
    }
    private function __clone()
    {
        
    }
    private function __wakeup()
    {
        
    }

}

使用:

$first = ConfigSingleton::getInstance();
$a = $first->getConfig();
var_dump($first);
var_dump($a);
$second = ConfigSingleton::getInstance();

$b = $second->getConfig();
var_dump($second);
var_dump($b);

可以看到 f i r s t 和 first和 firstsecond是完全一样的对象。
这里面看到用到了static:: i n s t a n c e 而不是 s e l f : : instance而不是self:: instance而不是self::instance. 这个是php的 static 和self 的区别,延迟绑定。
如果是多进程情况下,那怎么共享这些配置呢?因为php一个请求都是一个进程,这些static的值不能进程间共享,所以只能通过第三方共享了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值