delights/singleton

用于处理单例模式的工具

1.0.0 2020-05-06 07:18 UTC

This package is auto-updated.

Last update: 2024-09-06 17:51:21 UTC


README

用于处理单例模式的工具

CI badge Style CI badge Codecov License badge Last Version badge

入门

安装

您可以使用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

在此,特此免费许可任何获得此软件及其相关文档副本(以下简称“软件”)的人,可以在不受限制的情况下处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许向软件提供副本的个人这样做,前提是遵守以下条件:上述版权声明和本许可声明应包含在软件的所有副本或主要部分中

本软件按“现状”提供,不提供任何形式的保证,无论是明示的、暗示的,还是与商业性、特定目的适用性和非侵权性相关的保证。在任何情况下,作者或版权所有者都不应对任何索赔、损害或其他责任负责,无论该索赔、损害或其他责任是基于合同、侵权或其他方式,是否因软件或软件的使用或其它方式产生。