delights / singleton
用于处理单例模式的工具
Requires
- php: ^7.4
Requires (Dev)
- felixdorn/release-that: 0.4.0
- phpstan/phpstan: ^0.12.19
- phpunit/phpunit: ^9.1
- squizlabs/php_codesniffer: ^3.5
This package is auto-updated.
Last update: 2024-09-06 17:51:21 UTC
README
用于处理单例模式的工具
入门
安装
您可以使用composer安装此库,如果您还没有安装,请下载它。
您可以选择运行此命令
composer require delights/singleton
或者在您的 composer.json
中添加一个要求
{ "require": { "delights/singleton": "1.0.0" } }
在添加要求后,别忘了运行 composer install
免责声明
大多数情况下,您不需要使用单例,大多数情况下这其实是一种不良实践。这和全局变量一样糟糕。但是,这种模式存在是有原因的,它可以是有用的!我假设您知道自己在做什么,并且使用单例是解决问题的最佳方案。
单例
在您想转换为单例的任何类中使用它,这样就完成了!
让我给您举一个小例子。
use \Delight\Singleton\Singleton; class MySingleton { use Singleton; } MySingleton::getInstance() // will always return the same instance
不可克隆
您可能希望防止克隆。为此有一个简单的trait。让我给您举一个例子。
use Delight\Singleton\NotCloneable; class SomeClass { use NotCloneable; } $instance = new SomeClass(); clone $instance // throws an NonCloneableException
不可构造
您可能希望完全防止创建对象(除了在getInstance
方法或任何对象方法中之外)。
这也适用于子类
use Delight\Singleton\NotConstructable; class SomeOtherClass { use NotConstructable; } $someOtherClass = new SomeOtherClass(); // throws an Error, SomeOtherClass is protected
您可能认为这种行为在克隆防止方面不一致。然而,这是在不修改调用堆栈的情况下实现此功能的最简单方法。
安全
如果您发现任何与安全相关的问题,请通过电子邮件oss@dorns.fr联系,而不是使用问题跟踪器。
致谢
许可
版权所有 2020 Félix Dorn
在此,特此免费许可任何获得此软件及其相关文档副本(以下简称“软件”)的人,可以在不受限制的情况下处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许向软件提供副本的个人这样做,前提是遵守以下条件:上述版权声明和本许可声明应包含在软件的所有副本或主要部分中
本软件按“现状”提供,不提供任何形式的保证,无论是明示的、暗示的,还是与商业性、特定目的适用性和非侵权性相关的保证。在任何情况下,作者或版权所有者都不应对任何索赔、损害或其他责任负责,无论该索赔、损害或其他责任是基于合同、侵权或其他方式,是否因软件或软件的使用或其它方式产生。