brezgalov/php-typed-collection

基于PHP迭代器的类型集合的基本类

dev-master 2023-03-31 12:29 UTC

This package is auto-updated.

Last update: 2024-09-30 01:41:18 UTC


README

composer require brezgalov/php-typed-collection dev-master

描述

一个抽象设计,用于基于迭代器接口创建类型集合

如果您需要更多功能,请自由地将它们添加到您的自定义实现中。当需要时,您可以实现ArrayAccess

用法

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 
}

深度克隆

存储在集合中的对象是引用。

如果您想安全地克隆集合,请考虑使用以下所示 ContainerDeepCloneTraitAbstractTypedCloneSafeIterator

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
}