gamez / typed-collection
Type-safe collections based on Laravel Collections
Fund package maintenance!
jeromegamez
Installs: 163 004
Dependents: 0
Suggesters: 0
Security: 0
Stars: 40
Watchers: 3
Forks: 5
Open Issues: 0
Requires
- illuminate/collections: ^10.0 || ^11.0
Requires (Dev)
- phpstan/phpstan: ^1.10.62
- phpunit/phpunit: ^10.5.13
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.
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; class People extends TypedCollection { protected static $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; class LazyPeople extends LazyTypedCollection { protected static $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. */
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.