petrknap / php-singleton
v2.0.1
2024-04-27 11:51 UTC
Requires
- php: >=8.1
- petrknap/shorts: ^2.1
Requires (Dev)
- nunomaduro/phpinsights: ^2.11
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.5
- squizlabs/php_codesniffer: ^3.7
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
的条款。