psr-discovery/cache-implementations

这是一个轻量级库,通过搜索实现相关接口的知名类列表来发现可用的PSR-6缓存实现,并返回找到的第一个实例。

1.1.1 2024-03-04 21:22 UTC

This package is auto-updated.

Last update: 2024-09-04 22:28:37 UTC


README

这是一个轻量级库,通过搜索实现相关接口的知名类列表来发现可用的PSR-6缓存实现,并返回找到的第一个实例。

此软件包是PSR Discovery实用程序套件的一部分,该套件还支持PSR-18 HTTP客户端PSR-17 HTTP工厂PSR-14事件调度器PSR-11容器PSR-3日志

这主要用于包含在希望支持PSR-6缓存而不需要依赖特定实现或要求用户进行额外配置的SDK等库中。

要求

  • PHP 8.1+
  • Composer 2.0+

成功发现需要宿主应用程序中存在兼容的实现。此库不会为您安装任何实现。

实现

以下自动发现并实例化的psr/cache-implementation实现:

以下实现可以被发现,但需要手动实例化,因为这些实现需要配置:

以下也是可用的模拟实现:

如果您希望看到缺失的特定实现,请打开一个拉取请求以添加支持。

安装

composer require psr-discovery/cache-implementations

使用

use PsrDiscovery\Discover;

// Return an instance of the first discovered PSR-6 Cache implementation.
$cache = Discover::cache();

$cache->set('foo', 'bar');

您还可以使用Discover::caches()检索包含所有发现实现的数组。如果您想支持需要配置才能实例化的实现,这很有用。

use PsrDiscovery\Discover;

$caches = Discover::caches();

foreach ($caches as $cache) {
    echo sprintf('Discovered %s v%s', $cache->getPackage(), $cache->getVersion());
}

处理失败

如果库无法发现合适的PSR-6实现,则Discover::cache()发现方法将简单地返回null。这允许您优雅地处理失败,例如通过回退到默认实现。

示例

use PsrDiscovery\Discover;

$cache = Discover::cache();

if ($cache === null) {
    // No suitable Cache implementation was discovered.
    // Fall back to a default implementation.
    $cache = new DefaultCache();
}

单例

默认情况下,Discover::cache() 方法将始终返回一个发现实现的新的实例。如果您想使用单例实例,只需将 true 传递给发现方法的 $singleton 参数即可。

示例

use PsrDiscovery\Discover;

// $cache1 !== $cache2 (default)
$cache1 = Discover::cache();
$cache2 = Discover::cache();

// $cache1 === $cache2
$cache1 = Discover::cache(singleton: true);
$cache2 = Discover::cache(singleton: true);

优先级模拟

此库将优先搜索已知、可用的模拟库,然后再搜索真实实现。这是为了让使用此库的代码更容易进行测试。

预期这些模拟库始终作为开发依赖项安装,因此如果它们可用,则打算使用。

偏好实现

如果您想优先选择特定的实现,可以通过包名进行 prefer()

use PsrDiscovery\Discover;
use PsrDiscovery\Implementations\Psr6\Caches;

// Prefer the a specific implementation of PSR-6 over others.
Caches::prefer('league/container');

// Return an instance of League\Container\Container,
// or the next available from the list of candidates,
// Returns null if none are discovered.
$cache = Discover::cache();

这将导致当可用时,cache() 方法返回首选实现,否则将回退到默认行为。

请注意,分配首选实现将使其优先于模拟库的默认偏好。

使用特定实现

如果您想强制使用特定实现并忽略其他发现候选者,可以使用 use() 其包名。

use PsrDiscovery\Discover;
use PsrDiscovery\Implementations\Psr6\Caches;

// Only discover a specific implementation of PSR-6.
Caches::use('league/container');

// Return an instance of League\Container\Container,
// or null if it is not available.
$cache = Discover::cache();

这将导致当可用时,cache() 方法返回首选实现,否则将返回 null

此库不是由PHP-FIG生产、推广或与之有其他关联。