Singleton pattern for PHP

Fund package maintenance!

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

This package is auto-updated.

Last update: 2024-06-27 12:07:13 UTC


Singleton pattern for PHP

Simple implementation of singleton (anti-)pattern.

Why use a singleton?

Because it can solve deadlocks and other problems. See this example:

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);

You cannot create two instances at the same time with this code...

$first = new UnsafeFileAppender();  // OK
$second = new UnsafeFileAppender(); // Deadlock simply convert it into singleton...

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

class SafeFileAppender extends UnsafeFileAppender implements SingletonInterface
    use SingletonTrait;

    private function __construct()

...and use the same instance twice.

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

Run composer require petrknap/singleton to install it. You can support this project via donation. The project is licensed under the terms of the LGPL-3.0-or-later.