stefna / ds-collection

stefna的常见集合类

1.1.0 2024-03-22 12:30 UTC

This package is auto-updated.

Last update: 2024-09-22 13:37:54 UTC


README

Build Status Latest Version on Packagist Software License

本包是一个轻量级的配置加载器,以类型安全为主要基石。

要求

PHP 8.2 或更高版本。

安装

composer require stefna/ds-collection

用法

通用实现

为了方便和内部使用,我们提供了集合的2个通用实现

列表

<?php

use Stefna\Collection\GenericListCollection;
use Stefna\Collection\GenericMapCollection;


/** @var GenericListCollection<ClassType> */
$collection = new GenericListCollection(ClassType::class);

$collection[] = new ClassType();
// or
$collection->add(new ClassType());

/** @var GenericMapCollection<ClassType> */
$newCollection = $collection->indexBy(fn (ClassType $o) => (string)$o->id);

映射

<?php

use Stefna\Collection\GenericListCollection;
use Stefna\Collection\GenericMapCollection;


/** @var GenericMapCollection<ClassType> */
$collection = new GenericMapCollection(ClassType::class);

$collection['id'] = new ClassType();
// or
$collection->add('id', new ClassType());

foreach ($collection as $key => $object) {
	$key === string;
	$object === ClassType::class;
}

/** @var GenericListCollection<ClassType> */
$listCollection = $collection->toList();
foreach ($collection as $key => $object) {
	$key === int;
	$object === ClassType::class;
}

创建类型化集合

最好是子类化 AbstractListCollectionAbstractMapCollection

<?php

use Stefna\Collection\AbstractListCollection;

final class RowCollection extends AbstractListCollection
{
	protected static string $defaultCollectionType = ClassType::class;
}

$collection = new RowCollection();
$collection->getType() === ClassType::class;

贡献

我们总是很高兴收到错误/安全报告和错误/安全修复

许可

MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件