gamez/typed-collection
最新稳定版本:8.0.0
Composer 安装命令:
composer require gamez/typed-collection
包简介
Type-safe collections based on Laravel Collections
README 文档
README
Note
Laravel 11 added the ensure() collection method that verifies that all elements of
a collection are of a given type or list of types. However, this verification does not
prevent items of different types to be added at a later time.
Note
If you use Laravel collections combined with Larastan/PHPStan, you won't need this library and can just™ annotate your collection classes directly.
Installation
The package can be installed with Composer:
$ composer require gamez/typed-collection
Usage
class Person { public $name; public function __construct($name) { $this->name = $name; } } $taylor = new Person('Taylor'); $jeffrey = new Person('Jeffrey');
Typed Collections
use Gamez\Illuminate\Support\TypedCollection; /** * @extends TypedCollection<array-key, Person> */ class People extends TypedCollection { protected static array $allowedTypes = [Person::class]; } $people = People::make([$taylor, $jeffrey]) ->each(function (Person $person) { printf("This is %s.\n", $person->name); }); /* Output: This is Taylor. This is Jeffrey. */ try { People::make('Not a person'); } catch (InvalidArgumentException $e) { echo $e->getMessage().PHP_EOL; } /* Output: Output: A People collection only accepts items of the following type(s): Person. */
Lazy Typed Collections
use Gamez\Illuminate\Support\LazyTypedCollection; /** * @extends LazyTypedCollection<array-key, Person> */ class LazyPeople extends LazyTypedCollection { protected static array $allowedTypes = [Person::class]; } $lazyPeople = LazyPeople::make([$taylor, $jeffrey]) ->each(function (Person $person) { printf("This is %s.\n", $person->name); }); /* Output: This is Lazy Taylor. This is Lazy Jeffrey. */ try { LazyPeople::make('Nope!'); } catch (InvalidArgumentException $e) { echo $e->getMessage().PHP_EOL; } /* Output: Output: A People collection only accepts objects of the following type(s): Person. */
Mixed collections
/** * @extends LazyTypedCollection<array-key, int|string|Person> */ class MixedTypeCollection extends TypedCollection { protected static array $allowedTypes = ['int', 'string', Person::class]; }
Supported types
Supported types are class strings, like Person::class, or types recognized by the
get_debug_type() function, int, float,
string, bool, and array.
Helper functions
The typedCollect() helper function enables you to dynamically create typed collections
on the fly:
$dateTimes = typedCollect([new DateTime(), new DateTime()], DateTimeInterface::class);
For further information on how to use Laravel Collections, have a look at the official documentation.
统计信息
- 总下载量: 276.15k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 45
- 点击次数: 1
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2017-08-31