composer require headsnet/collections
Assuming you have some class Foo
that you want to put into a collection:
final class Foo
{
public function __construct(
public string $name
) {
}
}
Then create a custom named collection to hold the Foo
instances:
/**
* @extends AbstractImmutableCollection<Foo>
*
* @method self filter(callable $func)
* @method self reverse()
*/
final class FooCollection extends AbstractImmutableCollection
{
public function getItemClassName(): string
{
return Foo::class;
}
}
Then instantiate the collection:
$foo1 = new Foo();
$foo2 = new Foo();
$allFoos = new FooCollection([$foo1, $foo2]);
You then have an immutable, iterable object that can be filtered, mapped and walked:
foreach ($allFoos as $foo) {
$this->assertInstanceOf(Foo::class, $foo);
}
Contributions are welcome. Please submit pull requests with one fix/feature per pull request.