petrknap/php-singleton

此包已被废弃,不再维护。作者建议使用petrknap/singleton包。

PHP的单例模式

v2.0.1 2024-04-27 11:51 UTC

This package is auto-updated.

Last update: 2024-04-27 11:52:24 UTC


README

单例模式(反模式)的简单实现。

为什么要使用单例?

因为它可以解决死锁和其他问题。见以下示例

class UnsafeFileAppender
{
    const MY_FILE = '/tmp/my.file';

    private $handle = null;

    public function __construct()
    {
        $this->handle = fopen(self::MY_FILE, 'a');
        flock($this->handle, LOCK_EX);
    }

    public function __destruct()
    {
        flock($this->handle, LOCK_UN);
        fclose($this->handle);
    }
}

您不能同时使用此代码创建两个实例...

$first = new UnsafeFileAppender();  // OK
$second = new UnsafeFileAppender(); // Deadlock

...因此,将其转换为单例...

use PetrKnap\Singleton\SingletonInterface;
use PetrKnap\Singleton\SingletonTrait;

class SafeFileAppender extends UnsafeFileAppender implements SingletonInterface
{
    use SingletonTrait;

    private function __construct()
    {
        parent::__construct();
    }
}

...然后使用相同的实例两次。

$first = SafeFileAppender::getInstance();  // OK
$second = SafeFileAppender::getInstance(); // OK

运行 composer require petrknap/singleton 来安装它。您可以通过捐赠来支持此项目。该项目遵循LGPL-3.0-or-later的条款