tomwright/singleton

该包最新版本(1.0.3)的许可证信息不可用。

一个简单快捷的单例包。

该包的规范存储库似乎已消失,因此该包已被冻结。

1.0.3 2017-02-01 19:38 UTC

This package is not auto-updated.

Last update: 2019-04-11 00:20:02 UTC


README

Build Status Total Downloads Latest Stable Version Latest Unstable Version License

Singleton 是一个简单的包,可用于实现单例设计模式。

安装

composer require tomwright/singleton

基本用法

use TomWright\Singleton\SingletonTrait

class DatabaseConnection
{
    use SingletonTrait;
    
    public $connectionId;
    
    public function __construct()
    {
        $this->connectionId = rand();
    }
}

$db = DatabaseConnection::getInstance();
echo $db->connectionId; // 1231

$db = DatabaseConnection::getInstance();
echo $db->connectionId; // 1231

$db = DatabaseConnection::getInstance('another_connection');
echo $db->connectionId; // 1543

$db = DatabaseConnection::getInstance('another_connection');
echo $db->connectionId; // 1543

// The argument passed in here is defaulted to "default"
$db = DatabaseConnection::getInstance('default');
echo $db->connectionId; // 1231

设置自己的实例

如有必要,您可以自己设置一个特定的实例。

$db = new DatabaseConnection();
echo $db->connectionId; // 9373
DatabaseConnection::setInstance('some_connection', $db);

$db = DatabaseConnection::getInstance('some_connection');
echo $db->connectionId; // 9373

附加功能

您可以使用一些其他方法来自定义与该包的体验。

static::createSingleton($instanceId)

如果此方法存在于您的类中,它将用于而不是您类中的默认 __construct() 方法。

请注意,它必须 返回 新的实例。

use TomWright\Singleton\SingletonTrait

class DatabaseConnection
{
    use SingletonTrait;
    
    public $connectionId;
    
    public function __construct()
    {
        $this->connectionId = rand();
    }
    
    public static function createSingleton($instanceId)
    {
        $instance = new static();
        if ($instanceId == 'my-specific-connection') {
            $instance->connectionId = 1;
        }
        return $instance;
    }
}

$db = DatabaseConnection::getInstance();
echo $db->connectionId; // 2313

$db = DatabaseConnection::getInstance('some-general-connection');
echo $db->connectionId; // 5432

$db = DatabaseConnection::getInstance('my-specific-connection');
echo $db->connectionId; // 1

initSingleton($instanceId)

如果此方法存在于您的类中,它将在实例创建后立即执行一次。

use TomWright\Singleton\SingletonTrait

class DatabaseConnection
{
    use SingletonTrait;
    
    public $connectionId;
    
    public function __construct()
    {
        $this->connectionId = rand();
    }
    
    public static function initSingleton($instanceId)
    {
        if ($instanceId == 'my-specific-connection') {
            $this->connectionId = 1;
        }
    }
}

$db = DatabaseConnection::getInstance();
echo $db->connectionId; // 2313

$db = DatabaseConnection::getInstance('some-general-connection');
echo $db->connectionId; // 5432

$db = DatabaseConnection::getInstance('my-specific-connection');
echo $db->connectionId; // 1