brezgalov / php-typed-collection
base class for making typed collections via PHP iterator
Installs: 27
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/brezgalov/php-typed-collection
Requires
- php: >=8.0.0
This package is auto-updated.
Last update: 2025-10-29 03:18:30 UTC
README
composer require brezgalov/php-typed-collection dev-master
Description
Abstraction designed to make typed collections based on Iterator interface
If you need more functions - feel fre to add them to your custom implementation. You can implement ArrayAccess when it required
Usage
class MyClassCollection extends AbstractTypedIterator
{
    /**
     * override to set collection element type 
     */
    public function current(): MyClass
    {
        return parent::current();
    }
    /**
     * Make shure items are same type 
     */
    protected function validateItem($item): bool
    {
        return $item instanceof MyClass;
    }
}
// now go use
$collection = new MyClassCollection([
    new MyClass(),
    new MyClass(),
    new MyClass(),
]);
foreach($collection as $class) {
    // $class instance of MyClass - put your handle logic here 
}
Deep cloning
Objects stored inside collection are references.
If you want to clone collection safely - consider using ContainerDeepCloneTrait or AbstractTypedCloneSafeIterator as it shown below:
ContainerDeepCloneTrait:
class MyClassCollection extends AbstractTypedIterator
{
    use ContainerDeepCloneTrait;
    public function current(): MyClass
    {
        return parent::current();
    }
    protected function validateItem($item): bool
    {
        return $item instanceof MyClass;
    }
}
$clone = clone $myClassCollection; // it's deep cloned now
AbstractTypedCloneSafeIterator:
class MyClassCollection extends AbstractTypedCloneSafeIterator
{
    ...
}
function testClone() {
    $myClass = new MyClass();
    $array = [$myClass];
    return new MyClassCollection($array); // $myClass is cloned
}